Personal tools
You are here: Home Lights on Zope Categories PostgreSQL
« November 2017 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
Recent entries
Python Anywhere seko 2016-11-19
帯状疱疹 seko 2016-11-18
Chromebook購入 seko 2016-11-03
マカロニさん めざせデータサイエンティスト seko 2016-11-02
脳波計muse 購入 seko 2016-09-04
フェルデンクライスメソッド227回目  seko 2016-08-27
EXCELマクロ タスクが残っていてTypeNameとShell.Applicationを使って起動済みのIEが探せない seko 2016-04-19
pythonでNITE 化学物質総合情報提供システムへアクセス seko 2016-04-19
Raspberry Pi 3で侵入者を発見 seko 2016-04-03
Raspberry Pi 3 OSのインストール seko 2016-04-02
Docker コンテナをexportするpythonスクリプト seko 2016-03-31
Effective Python ―Pythonプログラムを改良する59項目 seko 2016-03-30
確かな力が身につくPython「超」入門 鎌田 正浩 (著) seko 2016-03-29
pythonでバブルソート seko 2016-03-24
Recent trackbacks
シャネル財布激安 シャネル財布激安 2017-11-21
シャネルバッグコピー シャネルバッグコピー 2017-11-14
ブランドコピー ブランドコピー 2017-11-14
スーパーコピー代引き スーパーコピー代引き 2017-11-11
ウブロスーパーコピー ウブロスーパーコピー 2017-11-11
スーパーコピーブランド激安通販専門店シャネルバッグコピー品 スーパーコピーブランド激安通販専門店シャネルバッグコピー品 2017-11-08
ブランド財布コピー ブランド財布コピー 2017-11-07
ルイヴィトンダミエバッグコピー ルイヴィトンダミエバッグコピー 2017-11-07
ブランドスーパーコピー ブランドスーパーコピー 2017-11-06
ルイヴィトン 財布カンコク コピー ルイヴィトン 財布カンコク コピー 2017-11-05
エルメスバーキンバッグ エルメスバーキンバッグ 2017-11-01
ジェイコブ時計 ジェイコブ時計 2017-10-31
ブランドコピー激安販売通販 ブランドコピー激安販売通販 2017-10-30
偽ブランド時計 偽ブランド時計 2017-10-30
 
Document Actions

PostgreSQL

Up one level

Document Actions

Windows7のpythonからPostgresqlへ接続

by seko posted at 2013-10-17 07:15 last modified 2013-10-17 12:36

win-psycopg のサイトから、インストールしてあるPythonにあったプログラムをダウンロードし、ダブルクリックでインストール。

私の場合は、Python2.6 32bit版なので、psycopg2-2.5.1.win32-py2.6-pg9.2.4-release.exe を選択。

こんなスクリプトでアクセスできます。

 import psycopg2

 dsn="dbname=testdb host=192.168.10.9 port=5432 user=seko"
 sql_txt="select * from test_table;" 

 con = psycopg2.connect(dsn)
 cur = con.cursor()
 cur.execute(sql_txt)
 for record in cur:
     print record
 cur.close()
 con.close()
The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3434/tbping

Windows10のpythonからPostgresqlへ接続

Posted by 森内良子 at 2016-06-07 08:45
おせわになります。PCの環境はWin10,Python2.7.11 、postgresql-9.6.0-beta1-windows-x64.exe 、psycopg2-2.6.1.win32-py2.7-pg9.4.4-release.exeからダウンロードインストールをいたしました。
初心者です。

このとき下記を実行すると
import psycopg2

if __name__ == "__main__":

connector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw")
cursor = connector.cursor()

sql = "insert into test_table values('1','python')"
cursor.execute(sql)
sql = "insert into test_table values('2','パイソン')"
cursor.execute(sql)
sql = "insert into test_table values('3','ぱいそん')"
cursor.execute(sql)

connector.commit()

cursor.close()
connector.close()

これをtest105.pyで保存してコマンドで実行すると

Traceback (most recent call last):
File "test105.py", line 7, in
connector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw")
File "C:\Python27\lib\site-packages\psycopg2\init.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
エラーが出ましてimportされていません
どうすればよいのでしょうか?

お教えいただけませんか?特にconnector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw")がポイントになるような気がします
よろしくお願いいたします

Re:Windows7のpythonからPostgresqlへ接続

Posted by 通りすがり at 2016-08-05 11:40
解決済みだったらスルーして下さい。
psycopg2はimportされています。エラーメッセージはpsycopg2が出していて、
「PostgreSQLサーバに接続できません、(既定の)5432ポートが開いてますか」等と言ってます。
同じ設定(host, database, user, password)で、PostgreSQL付属のpsqlで接続できますか。
だめならpython以前の問題なので、ネットワークかユーザ認証の設定をチェックしてみて下さい。

コピー時計

Posted by コピー時計 at 2017-08-15 19:59
当店は、ますます多くの人が選ぶ 日本的な人気と信頼を得ています! 最も安い高級アイテムは、1つを持っているに値する! 私たちの豪華なアイテム工場でオンラインストアをアウトレット 保証商品&24時間365日オンラインサービス! 芸能人愛用『大注目』 手頃な価格でお好きなもの 今、私たちは安価な高級品海外通販しています。 私たちは、デザイナーの多数な選択を運ぶ 高品質と最高の専門の顧客サービスと 最安値で販売、80%以上割引! お得ランキング! 大ヒット激安! 海外有名,正規品激安大販売☆ アウトレット!

ルイヴィトン時計

Posted by ルイヴィトン時計 at 2017-09-23 18:11
主な取り扱い商品:スーパーコピー時計 主な取り扱いブランド: ロレックススーパーコピー,パネライスーパーコピー,ウブロスーパーコピー, ブライトリングスーパーコピー,IWCスーパーコピー,フランクミュラースーパーコピー, カルティエスーパーコピー,ベル&ロススーパーコピー,オメガスーパーコピー,ショパールスーパーコピー, フェラーリスーパーコピー,グラハムスーパーコピー,ハリー ウィンストンスーパーコピー,アランシルベスタインスーパーコピー, ポルシェスーパーコピー,ドゥ・ヴィットスーパーコピー,ポールピコスーパーコピー, ボーム&メルシエスーパーコピー,エルメススーパーコピー,コルムスーパーコピー,パテックフィリップスーパーコピー, ヴァシュロンコンスタンタンスーパーコピー,モンブランスーパーコピー,オーデマピゲスーパーコピー,ブルカリスーパーコピー品を扱っております。 他にも各種ブランドのスーパーコピー品多数、取り扱っております。 弊店は低価格で品質のいい商品をお客様にご提供いたします。 弊店では信用第一主義を徹底しており社員全員下記の方針のもとに頑張っています。 1.不適合品を入荷しない。 厳しく受け入れ検査を行い、お客様に満足いただける品質のいい物だけを入荷する。 2.不適合品を出荷しない。 出荷前に細部まで二重確認を行い、お客様からご注文頂いた商品を納期通り出荷する。 3.お客様からのクレームゼロ お客様第一主義を徹底し、お客様からのお問い合わせ、苦情等に対して積極的かつ丁寧に対応いたします。

ブランド偽物

Posted by ブランド偽物 at 2017-09-25 14:53
弊店では信用第一主義を徹底しており社員全員下記の方針のもとに頑張っています。 1.不適合品を入荷しない。 厳しく受け入れ検査を行い、お客様に満足いただける品質のいい物だけを入荷する。 2.不適合品を出荷しない。 出荷前に細部まで二重確認を行い、お客様からご注文頂いた商品を納期通り出荷する。 3.お客様からのクレームゼロ お客様第一主義を徹底し、お客様からのお問い合わせ、苦情等に対して積極的かつ丁寧に対応いたします。

シャネル時計N級品

Posted by シャネル時計N級品 at 2017-10-12 02:21
メール便なのに発送から次の日に届き、びっくりしました。埼玉→岡山 スタッフの連絡、発送対応は素晴らしいです!また機会が有ればぜひ利用したい信頼のおける店舗です!

シャネル時計

Posted by シャネル時計 at 2017-10-20 08:49
丁寧な梱包で驚きました!お店の方の直筆のお手紙が入っていて(字も凄く綺麗)お心遣いに感動です!またリピートしたいです。 商品も良く・自分の心も気持ち良くさせて頂きました。良い買い物させて頂きました。 ありがとうございます!

偽ブランド時計

Posted by 偽ブランド時計 at 2017-10-30 04:44
2017年人気貴族エルメス コピー安心専門店、 一流ブランドショップ、シャネル コピー、 付属品完備!送料は無料です(日本全国)! ご注文を期待しています!100%品質保証  満足保。※日本國送料無料、信用第一、

ブランドコピー激安販売通販

Posted by ブランドコピー激安販売通販 at 2017-10-30 16:02
非常にいい書いてあったけどそうは思えない。 自社基準なので仕方ないと思うけど、もうここで買わない。

ジェイコブ時計

Posted by ジェイコブ時計 at 2017-10-31 10:24
早くに対応していただいてありがとうございます。 きれいなバッグでうれしいです。 【送料無料】オロップ 2WAYバッグをセール価格で販売中♪オロップ 2WAYバッグ ブラック クロコダイル 新品 ガマ口 クラッチバッグ ショルダーストラップ OLOP とてもきれいなバッグでした。金具がじゃましてスマホがケースなしで押し込めないと入らないことだけが残念です。きれいなのでこれから使っていきたいと思います。

エルメスバーキンバッグ

Posted by エルメスバーキンバッグ at 2017-11-01 09:49
商品の到着が早く驚きました またいいものがあれば購入させていただきたいと思います。 ありがとうございました。

ルイヴィトン 財布カンコク コピー

Posted by ルイヴィトン 財布カンコク コピー at 2017-11-05 06:52
ネットでバッグを購入するのがとても不安だったのでお問い合わせしました。 お修理等何かあってもお店へ持って行けるという事で信頼し購入しました。 とてもいい応対で何より迅速に梱包を丁寧いにしていただいて気持ちよく受け取りできました。 商品も気に入っております。ありがとうございます。

ブランドスーパーコピー

Posted by ブランドスーパーコピー at 2017-11-06 03:47
もう少し愛想があれば、、、でも問題はない ★ルイヴィトン★モノグラム★ドーヴィル★ハンドバッグ★M47270★ かなり良かった 安かったので、こんなに程度がいいとは思わなかった。 正直写真よりも実物のほうが良かった。

スーパーコピーブランド激安通販専門店シャネルバッグコピー品

注文後本当にすぐに届き驚きました。 迅速な対応ありがとうございました。 プレゼントにオススメ♪カードOK 送料無料 未使用コーチ ポーチ ダルシーサフィアーノレザースモールリストレット F52205 レザー レッド 新品・未使用 カーフ 革 皮 赤 ストラップ ロゴ COACH ちょうどいい大きさです。 使い勝手がいい大きさです。 これから活躍してくれそうです。

スーパーコピー代引き

Posted by スーパーコピー代引き at 2017-11-11 20:15
とにかく今まで色々購入してきましたが、一番!!と言えるくらい最高に丁寧な梱包で、感動すら覚えました!! ありがとうございました!! また機会があればぜひお付き合いしたいと思いました!!

シャネル財布激安

Posted by シャネル財布激安 at 2017-11-21 19:30
ヴィトンコピーバッグ ルイヴィトンスーパーコピーバッグ モノグラム対応 激安 安心通販 大人気のルイヴィトンスーパーコピーバッグの種類ご紹介です! 弊社のルイヴィトンモノグラムバッグスーパーコピー品は生産工場から直接仕入れます から! だから安いです。本舗は専門のブランド コピー品小売屋でございます,よろしくお願い 申し上げます。

全角マイナスを置換する?

by seko posted at 2013-05-26 21:34 last modified 2013-05-27 21:13

EUCに設定したZopeから、PostgreSQLにUTF-8で保存したデータを呼び出したら、SQLを発行した時点で、次のようなエラーが出てしまいました。

 Error Type: ProgrammingError
 Error Value: character 0xe28892 of encoding "UTF8" has no equivalent in "EUC_JP"

utf-8(hex):e28892というのは、unicode code point :U+2212 の文字です。

Unicodeの似た文字を整理してみた という記事を見ると、この文字をU+FF0D に置換すればよさそうです。

エラーになる文字は、「スルー」という単語の最後の文字なので、カタカナののばす記号U+30FC の方がよさそうです。uft-8(hex)だとe383bcです。

見た目が似たようなものには、U+2500 uft-8(hex)だとe29480というのもあります。

Postgresqlに取り込むテキストデータをsedで処理すればよいのですが、こういう文字を指定する方法が分かりません。

CentOS6のアクセサリにある文字マップでユニコードを検索

mojimap

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3310/tbping

Re:全角マイナスを置換する?

Posted by Papasan at 2013-05-26 23:39
日経Linuxの付録に次のようなsedコマンド例がありました。
$ sed -e s/command/コマンド/g target_file > out_file

target_fileの"command"を全て"コマンド"に置き換え、out_fileに出力する。

Re:全角マイナスを置換する?

Posted by seko at 2013-05-27 21:20
Papasanこんばんは。
commandやコマンドのように目で見える文字はうまくいきました。
しかし、今回問題となっている横棒はいくつも種類があるのに、見た目には違いが分かりにくいです。
仮名漢字変換をしても、どれがどれだか分からないし、数も不足している感じです。

いろいろ試してみていたところ、CentOS6のアプリに文字マップというのがあるのを発見、
U+2212のように検索してみたら、欲しい文字をコピーすることができました。
そしてこれをsedのs/の後に貼付けたら変換も成功しました。
ありがとうございました。

Re:全角マイナスを置換する?

Posted by Papasan at 2013-05-27 21:50
文字そのものの指定方法が問題だったのですね。
多分\xE28892などの16進数表記でいけると思ってました。

Re:全角マイナスを置換する?

Posted by seko at 2013-05-28 20:39
えっ、16進で指定できるんですか?
やってみます。

Common SQL Environment ver1.61をWindows7にインストール

by seko posted at 2013-04-19 22:22 last modified 2013-04-19 22:25

マカロニさんが、PostgresqlをGUIで操作したいというので、CSEをインストールしてみました。

つみきWebさん からCommon SQL Environment ver1.61 をダウンロードします。1.59はWindows7ではエラーが出ますので、注意してください。

ダウンロードしたZipファイルを解凍します。

こちら のサイトから日本語Windows版 libpq をダウンロードしてZipファイルを解凍し、中にあるlibpq.dllをCSEのあるディレクトリにコピーします。

==========

おまけ

helpを開こうとすると、エラー が出て読めません。

Windows 7 用 Windows Help プログラム (WinHlp32.exe) からOSに合わせて、32bitもしくは64bitのソフトをダウンロードして実行します。これで読めるようになりました。

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3261/tbping

Windows版 Plone4 にZPsycopgDAをインストールできない

by seko posted at 2013-04-19 15:05 last modified 2013-04-30 09:48

先日、Windows7 ProにPlone4.0.9をインストール しました。今日はこのPloneをpostgresqlにつなぐためにZpsycopgDAをインストールしようとしたのですが、やり方が分かりません。

検索しても、Windows版 Plone4.1 にZPsycopgDAをインストールできない という記事が一件ヒットするだけです。英語の記事も見つけられません。

やむなくPloneを諦めて zope2.8.11 にZsycopgDAをインストールしてみます。

Zope2.8.11という古いZopeを使ったのは、マカロニさんが日常的に使っているバージョンに合わせたためです。

Zopeのインストール

Zope-2.8.11-win32.exe をダウンロードして、ダブルクリックするだけです。途中でadminのパスワードを聞いてくるので設定します。

コントロール パネル\すべてのコントロール パネル項目\管理ツール\サービスに行き、一番下にあるZopeを起動します。

ブラウザからhttp://localhost:8080/ として、zopeが見えるかを確認します。うまくいったらhttp://locahost:8080/manage でadminユーザーでログインしてみます。

FTPサーバのインストール

Zopeに対して、FTPできるようにします。

C:\Zope\Instance\2.8.11\etc にいき、zope.confをエディタで開きます。

次のブロックのコメント#をはずします。

 #  <ftp-server>
 #    # valid key is "address"
 #    address 8021
 #  </ftp-server>

Zopeを再起動すれば、FTPが使えるようになっているはずです。

psycopgのインストール

  • Zope2.8.11で使われているpythonは2.4です。このため、win-psycopg のページを古い方にたどって、psycopg2-2.4.6.win32-py2.4-pg9.2.2-release.exe をダウンロードします。
  • 拡張子をexeからzipに変更します。
  • 圧縮解凍ソフトで解凍して、中にあるpsycopg2フォルダーをC:\Zope\2.8.11\Python\Libにコピーします。

ZpsycopgDAのインストール

  • ZPsycopgDA 2.4.6 をダウンロードします。
  • zipファイルを解凍し、 ZpsycopgDAフォルダを C:\Zope\Instance\2.8.11\Productにコピーします。
  • zopeを再起動します。

動作の確認

  • Zopeの管理画面から、zpsycopgDAアダプタを追加
  • TESTタブでSQLを発行してみる
The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3263/tbping

Windows7 にPostgreSQL9.2.4をインストール

by seko posted at 2013-04-18 15:00 last modified 2013-04-27 14:19

「WindowsにPostgresqlをインストール」で検索すると、事前にpostgresユーザを作っておく方法とそうしない方法の二つがあるように見受けられる。

postgresユーザを事前に作っておくというインストール方法を読んでも、作ったpostgresユーザをどのように使うのかが分からない。Linuxと同じようにposgresユーザでログインして使えば、パスワードを省略できるということなのだろうか?

DB online の解説が詳しいので、これを見ながらインストールしてみた。

バージョンは9.2.4、x-86 32版とした。

特に戸惑うこともなくすんなりとインスートールできた。 事前にpostgresユーザを作らなかったが、インストール後に自動でユーザが生成されているということもなかった。

postgresユーザがいなくても、通常の使用には問題がないように思える。

同じマシンにZopeをインストールして、そこから利用するので、認証を省くために

C:\Program Files (x86)\PostgreSQL\9.2\data\pg_hba.conf を次のように修正しておく。

 # IPv4 local connections:
 host    all             all             127.0.0.1/32            trust
 # IPv6 local connections:
 host    all             all             ::1/128                 trust
The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3265/tbping

ZopeからSigma Gridの追加、修正、削除 成功!!

by seko posted at 2013-01-27 16:10 last modified 2013-01-29 20:15

今までやったこと

続き

Firefoxのコンソールで、PHPを使った書き込みをモニタしてみます。一行を修正して保存ボタンを押すと、その一行が_gt_jsonとしてPOSTされます。

 _gt_json       {"fieldsName":["order_no","employee","country","customer","order2005","order2006","order2007","order2008","delivery_date"],"recordType":"object","parameters":{},"action":"save","insertedRecords":[],"updatedRecords":[{"order_no":"9","employee":"SP","country":"Br","customer":"papasan","order2005":"35","order2006":"73","order2007":"97","order2008":"100","delivery_date":"2008-03-02 00:00:00"}],"deletedRecords":[]}

同様に二行修正すると

 _gt_json       {"fieldsName":["order_no","employee","country","customer","order2005","order2006","order2007","order2008","delivery_date"],"recordType":"object","parameters":{},"action":"save","insertedRecords":[],"updatedRecords":[{"order_no":"9","employee":"SP","country":"Br","customer":"paapsan","order2005":"35","order2006":"73","order2007":"97","order2008":"100","delivery_date":"2008-03-02 00:00:00"},{"order_no":"8","employee":"SP","country":"Te","customer":"seko","order2005":"64","order2006":"47","order2007":"84","order2008":"41","delivery_date":"2008-10-04 00:00:00"}],"deletedRecords":[]}

レスポンスは次のようになっていました。

 {success : true,exception:''}

Zopeのpython Scriptで、_gt_jsonというパラメータを受け取ろうとしたら、頭が_のものは受け取れないとエラーになります。Sigma GridのJavaScriptを書き換えようかと思ったのですが、変な注意書きがあってやっていいかどうかが判断できません。仕方がないので、外部pythonで処理をします。

外部pythonは、Extensionsというディレクトリに入れるのですが、どこを探しても見つかりません。

検索するとPlone4での外部メソッド(External Method) という記事が見つかりました。

/usr/local/Plone/zinstance/parts/instance/Extensions を作ればいいらしいのですが、buildoutすると消えてしまうと書いてあります。

buildoutって何か分からないし、消えたらまた作るつもりで、Extensionsディスレクトリを作りました。

この中にcontroller.pyを作り、次の内容を記述します。requestのJSON文字列をpythonのディクショナリに変換して返すだけです。

 import json
 def get_gtjson(REQUEST):
    gt_json = json.loads(REQUEST.form['_gt_json'])
    return gt_json

Zope上にExternal Methodを作り、次のように設定します。

 Id: get_gtjson
 Title
 Module Name: controller
 Function Name: get_gtjson

Zope上にptyhon script ID:controllerを作ります。Papasanは、データベースへのアクセスも外部pythonでやっていました が、pythonからMySQLにアクセスしたことがないこともないし、データベースを切り替えた時でも変更が無くて済むように、Zope上のスクリプトで対処しました

 from Products.PythonScripts.standard import html_quote
 request = container.REQUEST
 response =  request.response

 gt_json = context.get_gtjson(request)

 if gt_json['action'] == "load":
     rec = context.get_data()
     for line in rec:
         txt = ""
         for i, name in enumerate(rec.names()):
             txt=txt+name+":"+'"'+str(line[i])+'",'        
         print "{"+txt[:-1]+"},",
         print 
     return "{data:[" + printed[:-2] + "],recordType : 'object'}"

 if gt_json['action'] == "save" and gt_json['updatedRecords']:
     for line in  gt_json['updatedRecords']:
         order_no = line['order_no']
         employee = line['employee']
         country = line['country']
         customer = line['customer']
         order2005 = line['order2005']
         order2006 = line['order2006']
         order2007 = line['order2007']
         order2008 = line['order2008']
         delivery_date = line['delivery_date']
         container.save_sql(employee=employee,country=country,customer=customer,order2005=order2005,order2006=order2006,order2007=order2007,order2008=order2008,delivery_date=delivery_date,order_no=order_no)
     return "{success : true,exception:''}"

 if gt_json['action'] == "save" and gt_json['insertedRecords']:
     for line in  gt_json['insertedRecords']:
         order_no = line['order_no']
         employee = line['employee']
         country = line['country']
         customer = line['customer']
         order2005 = line['order2005']
         order2006 = line['order2006']
         order2007 = line['order2007']
         order2008 = line['order2008']
         delivery_date = line['delivery_date']
         container.insert_sql(employee=employee,country=country,customer=customer,order2005=order2005,order2006=order2006,order2007=order2007,order2008=order2008,delivery_date=delivery_date,order_no=order_no)
     return "{success : true,exception:''}"

 if gt_json['action'] == "save" and gt_json['deletedRecords']:
     for line in  gt_json['deletedRecords']:
         order_no = line['order_no']
         employee = line['employee']
         country = line['country']
         customer = line['customer']
         order2005 = line['order2005']
         order2006 = line['order2006']
         order2007 = line['order2007']
         order2008 = line['order2008']
         delivery_date = line['delivery_date']
         container.delete_sql(employee=employee,country=country,customer=customer,order2005=order2005,order2006=order2006,order2007=order2007,order2008=order2008,delivery_date=delivery_date,order_no=order_no)
     return "{success : true,exception:''}"

データの取得、修正、挿入、削除の4つのSQLメソッドを書きます。

id:get_data :

 select * from orders;

id:save_sql :

 parameter
 employee=employee
 country=country
 customer=customer
 order2005=order2005
 order2006=order2006
 order2007=order2007
 order2008=order2008
 delivery_date=delivery_date
 order_no=order_no

 SQL
 update orders set
 employee = '<dtml-var employee>',
 country = '<dtml-var country>',
 customer = '<dtml-var customer>',
 order2005 = <dtml-var order2005>,
 order2006 = <dtml-var order2006>,
 order2007 = <dtml-var order2007>,
 order2008 = <dtml-var order2008>,
 delivery_date = '<dtml-var delivery_date>'
 where order_no = <dtml-var order_no>
 ;

id:insert_sql :

 parameter
 employee=employee
 country=country
 customer=customer
 order2005=order2005
 order2006=order2006
 order2007=order2007
 order2008=order2008
 delivery_date=delivery_date
 order_no=order_no

 SQL
 INSERT INTO  orders (employee,country,customer,order2005,order2006,order2007,order2008,delivery_date,order_no) VALUES
 (
 '<dtml-var employee>',
 '<dtml-var country>',
 '<dtml-var customer>',
 <dtml-var order2005>,
 <dtml-var order2006>,
 <dtml-var order2007>,
 <dtml-var order2008>,
 '<dtml-var delivery_date>',
 '<dtml-var order_no>'
 );

id:delete_sql :

 parameter
 employee=employee
 country=country
 customer=customer
 order2005=order2005
 order2006=order2006
 order2007=order2007
 order2008=order2008
 delivery_date=delivery_date
 order_no=order_no

 SQL 
 delete from orders 
 where order_no = <dtml-var order_no>
 ;

zope上にPagetemplateを追加し、index_htmlとします。内容は次のとおりです。loadURLとsaveURLは、controllerとします。Sigma Gridへのパスは配置に合わせて修正して下さい。なお、Plone4.2.1 Zope2.13ではDTMLを使うと一部の文字が化けた ので、生まれて初めてPagetemplateを使いました。(中身はただのhtmlですが。)

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" -->
 <html>
 <head>
 <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
 <title>Sigma Grid 2.0 CRUD Sample</title>

 <link rel="stylesheet" type="text/css" href="grid/gt_grid.css" />
 <link rel="stylesheet" type="text/css" href="grid/skin/vista/skinstyle.css" />
 <script type="text/javascript" src="grid/gt_msg_en.js"></script>
 <script type="text/javascript" src="grid/gt_grid_all.js"></script>
 <script type="text/javascript" src="grid/flashchart/fusioncharts/FusionCharts.js"></script>
 <script type="text/javascript" src="grid/calendar/calendar.js"></script>
 <script type="text/javascript" src="grid/calendar/calendar-setup.js"></script>

 <script type="text/javascript" >

 var grid_demo_id = "myGrid1";

 var dsOption= {

        fields :[
                {name : 'order_no'  },
                {name : 'employee'  },
                {name : 'country'  },
                {name : 'customer'  },
                {name : 'order2005' ,type: 'float' },
                {name : 'order2006' ,type: 'float' },
                {name : 'order2007' ,type: 'float' },
                {name : 'order2008' ,type: 'float' },
                {name : 'delivery_date' ,type:'date'  }

        ],
        recordType : 'object'
 }

 var colsOption = [
      {id: 'order_no' , header: "Order No" , width :60 },
      {id: 'employee' , header: "Employee" , width :80 , editor:{type:'text'}},
           {id: 'country' , header: "Country" , width :70, width :80 , editor : { type :"select" ,options : {'US': 'US' ,'FR':'FR', 'BR':'BR'} ,defaultText : 'US' } },
           {id: 'customer' , header: "Customer" , width :80, width :80 , editor:{type:'text'}},
           {id: 'order2005' , header: "2005" , width :60, width :80 , editor: { type :"text" ,validRule : ['R','F'] }},
           {id: 'order2006' , header: "2006" , width :60, width :80 , editor: { type :"text" ,validRule : ['R','F'] }},
           {id: 'order2007' , header: "2007" , width :60, width :80 , editor: { type :"text" ,validRule : ['R','F'] }},
           {id: 'order2008' , header: "2008" , width :60, width :80 , editor: { type :"text" ,validRule : ['R','F'] }},
           {id: 'delivery_date' , header: "Delivery Date" , width :100, editor: { type :"date" }}

 ];

 var gridOption={
        id : grid_demo_id,
        loadURL : 'controller',
        saveURL : 'controller',
        width: "700",  //"100%", // 700,
        height: "200",  //"100%", // 330,
        container : 'gridbox', 
        replaceContainer : true,
        encoding : 'UTF-8', // Sigma.$encoding(), 
        dataset : dsOption ,
        columns : colsOption ,
        clickStartEdit : true ,
        defaultRecord : {'order_no':"00",'employee':"",'country':"",'customer':"",'order2005':0,'order2006':0,'order2007':0,'order2008':0,'delivery_date':"2008-01-01"},
        pageSize:100,
        toolbarContent : 'reload | add del save | print'
 };

 var mygrid=new Sigma.Grid( gridOption );
 Sigma.Util.onLoad(function(){mygrid.render()});

 //////////////////////////////////////////////////////////

 </script>
 </head>
 <body>

 <div id="page-container">

   <div id="header">
   <h1>
       Product - Sigma Grid</h1>
   </div>

   <div id="content">

          <h2>Sigma Grid CRUD Sample</h2>

     <div id="bigbox" style="margin:15px;display:!none;">
       <div id="gridbox" style="border:0px solid #cccccc;background-color:#f3f3f3;padding:5px;height:200px;width:700px;" ></div>
     </div>

   </div>

   <h3>About Sigmasoft</h3>
     <p>
     Sigmasoft Technologies LLC is a software company providing cross-browser javascript GUI components and tools & services involved. Our aim is to make AJAX simple and easy. 
 <br>Sigmasoft also provides end-to-end solutions in web development (Web 2.0, PHP, ASP.NET, ASP, JSP, XML, Flash), application development and IT consulting services. Please send email to sales@sigmawidgets.com for further infomation.
 </p>
   <div id="footer">All contents are (c) Copyright 2005 - 2008, Sigma Software Inc. All rights Reserved</div>
 </div>

 </body>
 </html>

http://localhost:8080/seko/sigma_grid/index_html

などとアクセスすると、追加、修正、削除ができるようになりました。

苦節、半年。Papasanありがとう〜〜〜。

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3173/tbping

Re:ZopeからSigma Gridの追加、修正、削除 成功!!

Posted by Papasan at 2013-01-27 16:54
> 苦節、半年。Papasanありがとう〜〜〜。
おいらは、何もしてません。

Re:ZopeからSigma Gridの追加、修正、削除 成功!!

Posted by seko at 2013-01-27 17:26
書き終えてから5分もしないうちにコメントできるのはどういう仕掛けなんですか?

>おいらは、何もしてません。
PHPのソースをながめて何をしているかを考えていたのですが、まったく分かりませんでした。
FirefoxでJSONの通信を見られることをPapasanが教えてくれなかったら、ほぼ確実に出来ていなかったと思います。

Plone 4.2.1のZopeにZMySQLDAを入れてMySQLと接続

by seko posted at 2013-01-19 16:16 last modified 2013-01-27 16:20

マカロニさんから、Sigma Grid の件、Papasanはあんなにかっこ良く出来ている のに、私たちには無理なんですかと催促が入りました。

Sigma GridのPHPのデモをそのまま試したいので、ZopeからMySQLにつなぐためのアダプタZMYSQLDAを入れる。 検索をしても、昔の情報が多くて、Plone4にインストールする最適な方法が分からない。

Plone4.2.1はインストール済み

MySQLは、インストール済み

悩んでいても仕方が無いので、次を見ながらやってみた。

http://www.justmorebits.com/2011/08/installing-zmysqlda-on-plone-4-in-10.html

 yum install mysql-devel

http://sourceforge.net/projects/mysql-python/ からMySQL-pythonをダウンロード

 # tar zxvf MySQL-python-1.2.4b4.tar.gz
 # cd MySQL-python-1.2.4b4
 # /usr/local/Plone/Python-2.7/bin/python setup.py build
 # /usr/local/Plone/Python-2.7/bin/python setup.py install

http://old.zope.org/Members/adustman/Products/ZMySQLDA/ からZMySQLDA-2.0.8.tar.gz をダウンロード。2001年に作られた古い物なので、ソースコードに手を入れないとZopeが起動しない。 http://sourceforge.net/projects/mysql-python/files/zmysqlda/ には、3.1.1というバージョンがあるのだが、これを使うのが良いのだろうか。この新しいバージョンに気がついたのは、インストールが終わった後だったので、まずは2.0.8で書き進めていく。

 # tar zxvf ZMySQLDA-2.0.8.tar.gz
 # mv lib/python/Products/ZMySQLDA /usr/local/Plone/zinstance/products/

この状態で、Ploneをデバッグモードで起動するとエラーが出て立ちあがらない。

 # /usr/local/Plone/zinstance/bin/instance fg
    import Shared.DC.ZRDB.Connection, sys, DABase
  File "/usr/local/Plone/zinstance/products/ZMySQLDA/DABase.py", line 92, in <module>
    from ImageFile import ImageFile
 ImportError: No module named ImageFile

ZMySQLDAディレクトリの中にあるDA.pyとDABase.pyをViで開いて

 from ImageFile import ImageFile

を次のように書き換える。

 from App.ImageFile import ImageFile

再びDA.pyをviで開いて

 misc_={'conn': ImageFile(
    os.path.join('Shared','DC','ZRDB','www','DBAdapterFolder_icon.gif'))}

を次のように書き換える :

 misc_={'conn': ImageFile(
    os.path.join('Products','PageTemplates','www','exclamation.gif'))}

書き換えた後、Ploneが正常に起動すればOK。

 # /usr/local/Plone/zinstance/bin/instance fg

Zopeの管理画面から Z MySQL database Connedtionを追加します。

Databese Connection stringは、sigma_grid_server root としました。

testタブから次のSQLを発行すると

 select * from orders;

LIMITなんて使ってないのに、こんなエラーになります。 :

 Error Type: ProgrammingError
 Error Value: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near  'LIMIT 1000' at line 1")

データアダプタが古いせいでMySQLにつながらないのかなと思い、次のSQLを送ってみると

 show tables;

正しい反応が帰ってくるので、データベースにはつながっているようです。

 Tables in sigma grid server
 orders

検索してみると ZMySQLDA で LIMIT を使う という記事を発見しました。 そこで、Z SQL Methodを作り、Advanced タブをクリックして、 Maximum rows to retrieve の値を 0 (default は 1000)に変更しました。

Z SQL Methodから select * from orders; を発行したら正しい反応が返ってきました。

ここまでの所要時間は、8時間。Sigma Gridには、まだ手がかかってもいません。

でも、Papasanの記事 を暗記するほどながめていたら、概要はつかめてきました。

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3159/tbping

Re:Plone 4.2.1のZopeにZMYSQLDAを入れてMySQLと接続

Posted by Papasan at 2013-01-20 08:07
>でも、Papasanの記事 を暗記するほどながめていたら、概要はつかめてきました。

えらい!!
sekoさんはログインすると項目の編集ができます。

Plone 4.2.1をCentOS6.3にインストール

by seko posted at 2013-01-01 13:37 last modified 2013-01-27 16:30

ZopeでSigmaGridを使うテストのために、Vmware上のCentOS6.3にPlone4.2.1をインストールする。

注意:この記事に沿って、マカロニさんがPlone4.2.3をインストールしたところ、なにがしかのモジュールの不足でインストールできず。今のところPlone4.2.1をお勧めします。

前準備

 # yum install gcc
 # yum install openssl-devel

Firewallをオフにする :

 # system-config-firewall-tui

selinuxをdisableに :

 # vi /etc/selinux/config
 # This file controls the state of SELinux on the system.
 # SELINUX= can take one of these three values:
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
 SELINUX=disabled
 # SELINUXTYPE= can take one of these two values:
 #     targeted - Targeted processes are protected,
 #     mls - Multi Level Security protection.
 SELINUXTYPE=targeted

設定後、リブートする。

http://plone.org/ よりPloneをダウンロードしインストールする。ここではバージョン 4.2.1を Standalone で利用する。

 # tar zxvf Plone-4.2.1-UnifiedInstaller.tgz
 # cd Plone-4.2.1-UnifiedInstaller
 # ./install.sh standalone

インストールの最後に表示されるパスワードをメモしておきます。

起動する

 # /usr/local/Plone/zinstance/bin/plonectl start

ブラウザで http://localhost:8080/にアクセスして、新しいPloneサイトを作ります。

次はデータベースですが。。。。

考えてみたら、最近のPloneにデータベースをインストールしたことがありませんでした。

postgresqlのインストール

 # yum install postgresql-server postgresql-devel
 # service postgresql initdb
 # /etc/rc.d/init.d/postgresql start
 # chkconfig postgresql on 

サンプルテーブルの作成

 # su - postgres
 $ psql -c "alter user postgres with password 'password'" 
 $ createuser zope
 新しいロールをスーパーユーザとしますか?  (y/n)y
 $ su - zope
 パスワード:
 $ createdb testdb 
 $ psql -l
 $ psql testdb
 psql (8.4.13)
 "help" でヘルプを表示します.

 testdb=# create table test(fruits text,price int, qty int);
 CREATE TABLE
 testdb=# create table test(fruits text,price int, qty int);
 CREATE TABLE
 testdb=# insert into test(fruits,price,qty)values('orange',100,20);
 INSERT 0 1
 testdb=# insert into test(fruits,price,qty)values('apple',200,5);
 INSERT 0 1
 testdb=# seletct * from test;
 ERROR:  "seletct"またはその近辺で構文エラー
 行 1: seletct * from test;
       ^
 testdb=# select * from test;
  fruits | price | qty 
 --------+-------+-----
  orange |   100 |  20
  apple  |   200 |   5
 (2 行)

認証の設定 :

 # /var/lib/pgsql/data/pg_hba.conf
 で indentからtrustに変更
 # IPv4 local connections:
 host    all         all         127.0.0.1/32          trust

http://www.initd.org/psycopg/download/ からpsycopg2.4.6をダウンロードする。

 $ tar zxvf psycopg2-2.4.6.tar.gz
 $ cd psycopg2-2.4.6
 # su 
 # /usr/local/Plone/Python-2.7/bin/python setup.py install
 # mv ZPsycopgDA /usr/local/Plone/zinstance/products/
 # chown -R plone:postgres /usr/local/Plone/zinstance/products/ZPsycopgDA
 # /usr/local/Plone/zinstance/bin/plonectl restart 

ZopeのProductsを見ても、ZpsycopgDAは入っていないが、メニューからは追加できるようになっているので、これでいいらしい。

ZopeにPsycopg2_database_connectionを追加する

コネクションストリングには次のような書く。hostをtrust認証しているので、パスワードはいらない。 :

 dbname=testdb user=zope

test で select * from table; を発行

 Fruits  Price Qty
 orange 100  20
 apple  200 5

成功!! 今日はここまで。

FTPを使えるようにする :

 # vi /usr/local/Plone/zinstance/buildout.cfg

 # Ports
 # -----
 # Specify the port on which your Zope installation
 # will listen:
 http-address = 8080
 ftp-address = 8021 これを追加

builoutする :

 # cd /usr/local/Plone/zinstance/
 # ./bin/buildout

zope.confの修正 :

 # vi /usr/local/Plone/zinstance/parts/instance/etc/zope.conf

FTPの部分を追加 :

 <http-server>
    address 8080
 </http-server>
 <ftp-server>
    address 8021
 </ftp-server>

Zopeを一度止めて、デバッグモードで起動 :

 # /usr/local/Plone/zinstance/bin/instance fg

エラーがでなければ、通常モードで起動 :

 # /usr/local/Plone/zinstance/bin/plonectl start

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3157/tbping

Sigma GridのPHP,MySQLデモを動かす

by seko posted at 2012-12-20 20:42 last modified 2013-01-27 17:30

Sigma Grid はテーブルの表示とソート、データ編集などを可能にする超豪華ライブラリです。

マカロニさんが、表計算のようなテーブルをWEBから更新したいというので、PHPもMySQLも使ったことがないのに、デモを動かしてみることにしました。

Sigma Gridはデータの表示に際してJSONでデータを渡す必要があり、そのための関数サポートしているのはPHP5.2以降のようです。

マカロニさんのサーバは、CentOS5.8で、PHPは5.1.6でしたので、使えません。

このため、最初にCentOS6.3をインストール しました。

ApacheとPHPをインストール します。PHPをインストール します。

Database/backend integration sample with PHP (599 KB mysql script included) をダウンロードして、解凍し、フォルダーの名前をsigma_grid_phpに変更して、/var/www/htmlの下のコピーします。

フォルダーの中にCreateTable.sqlがあるので、エディタで中を見て、デモ用のデータを作ります。

 mysql -u root

でログインし、データベースとテーブルを作り、データをインサートします。

 mysql>create database sigma_grid_server;

 mysql>use sigma_grid_server

 mysql>CREATE TABLE `orders` (
  `order_no` int(11) NOT NULL auto_increment,
  `employee` varchar(31) NOT NULL,
  `country` varchar(2) NOT NULL,
  `customer` varchar(31) NOT NULL,
  `order2005` float NOT NULL,
  `order2006` float NOT NULL,
  `order2007` float NOT NULL,
  `order2008` float NOT NULL,
  `delivery_date` datetime NOT NULL,
  PRIMARY KEY  (`order_no`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;

 mysql>INSERT INTO `orders` (`order_no`, `employee`, `country`, `customer`, `order2005`, `order2006`, `order2007`, `order2008`, `delivery_date`) VALUES 
(1, 'Dent Carry', 'US', 'Sigmasoft L', 33.9, 56.9, 453.9, 120.7, '2008-06-24 14:10:46'),
(5, 'RA', 'Ed', 'Sidney', 61, 31, 80, 47, '2008-10-16 00:00:00'),
(6, 'CA', 'Pa', 'Solomon', 82, 70, 33, 38, '2008-04-21 00:00:00'),
(7, 'MA', 'Le', 'Glendon', 90, 77, 98, 36, '2008-08-07 00:00:00'),
(8, 'SP', 'Te', 'Edwin', 64, 47, 84, 41, '2008-10-04 00:00:00'),
(9, 'SP', 'Br', 'Mike', 35, 73, 97, 83, '2008-03-02 00:00:00'),
(10, 'MA', 'Je', 'Keith', 50, 57, 80, 46, '2008-10-02 00:00:00'),
(11, 'CA', 'Ev', 'Chris', 66, 76, 43, 63, '2008-04-04 00:00:00'),
(12, 'IN', 'Ro', 'Samuel', 63, 49, 85, 68, '2008-07-11 00:00:00'),
(13, 'MA', 'Gl', 'Oscar', 94, 96, 62, 33, '2008-11-16 00:00:00'),
(14, 'MA', 'Co', 'Peter', 76, 86, 77, 67, '2008-12-12 00:00:00'),
(15, 'MA', 'Ja', 'Benson', 88, 96, 56, 33, '2008-11-16 00:00:00'),
(16, 'UK', 'Fr', 'Lance', 87, 85, 47, 66, '2008-10-21 00:00:00'),
(17, 'MA', 'Bi', 'Donald', 64, 70, 76, 87, '2008-03-06 00:00:00'),
(18, 'CA', 'Se', 'Hunk', 50, 45, 46, 72, '2008-09-18 00:00:00'),
(19, 'IN', 'Ke', 'Bob', 62, 64, 61, 61, '2008-01-19 00:00:00'),
(20, 'US', 'Ja', 'Coli', 72, 92, 56, 41, '2008-11-20 00:00:00'),
(21, 'IN', 'Br', 'Ivan', 68, 62, 66, 78, '2008-02-13 00:00:00'),
(22, 'SP', 'Sa', 'Vern', 93, 66, 85, 71, '2008-12-18 00:00:00'),
(23, 'US', 'Br', 'Leopold', 45, 70, 52, 39, '2008-11-07 00:00:00'),
(24, 'CA', 'Le', 'Caspar', 62, 94, 53, 88, '2008-03-18 00:00:00'),
(25, 'SP', 'Ju', 'Joe', 38, 97, 35, 74, '2008-07-31 00:00:00'),
(26, 'UK', 'Co', 'Thomas', 55, 58, 62, 46, '2008-07-19 00:00:00'),
(27, 'MA', 'Gi', 'Andrew', 33, 52, 68, 67, '2008-11-11 00:00:00'),
(28, 'SP', 'Br', 'Gary', 61, 54, 62, 42, '2008-08-16 00:00:00'),
(29, 'RA', 'Ry', 'Bob', 83, 50, 34, 46, '2008-12-01 00:00:00'),
(30, 'US', 'Ga', 'Johnny', 45, 56, 36, 79, '2008-02-23 00:00:00'),
(31, 'CA', 'Ra', 'Carl', 59, 42, 65, 47, '2008-09-20 00:00:00'),
(42, 'MA', 'Je', 'Keith', 50, 57, 80, 46, '2008-10-02 00:00:00'),
(43, 'SP', 'Ch', 'Marks', 79, 37, 40, 90, '2008-04-24 00:00:00'),
(45, 'RA', 'Ed', 'Sidney', 61, 31, 80, 47, '2008-10-16 00:00:00');

オーナーや権限の設定もいるかもしれません。

 # chown -R apache:apache /var/www/html/sigma_grid_php
 # chmod -R 755 /var/www/html/sigma_grid_php

ブラウザで、http://localhost/sigma_grid_php/index.phpにアクセスすると権限がないとエラーになります。

いつも邪魔ばかりするSELINUXです。

 # vi /etc/sysconfig/selinux

でファイルを開き、SELINUX=disabledに変更します。保存した後にリブートが必要です。

これでブラウザにデモ画面が出ますので、適当にクリックしてデータベースにつながっていることを確認できました。

これを参考にZopeで同じことが出来るように書き換えていきたいです。

マカロニさんのZope2.8.6で、pythonは2.3だったので、JSONモジュールは使えませんね。

ちなみに、以下がデータを読み書き修正の部分です。 :

 <?php
 include_once("../ConnectionManager.php");
 header('Content-type:text/javascript;charset=UTF-8');

 $json=json_decode(stripslashes($_POST["_gt_json"]));
 //$pageNo = $json->{'pageInfo'}->{'pageNum'};

 $conManager = new ConManager();
 $conManager->getConnection();

 if($json->{'action'} == 'load'){
   $sql = "select * from orders";
   $handle = mysql_query($sql);

   $retArray = array();
   while ($row = mysql_fetch_object($handle)) {
     $retArray[] = $row;
   }
   $data = json_encode($retArray);
   $ret = "{data:" . $data .",\n";
   $ret .= "recordType : 'object'}";
   echo $ret;

 }else if($json->{'action'} == 'save'){
   $sql = "";
   $params = array();
   $errors = "";

   //deal with those deleted
   $deletedRecords = $json->{'deletedRecords'};
   foreach ($deletedRecords as $value){
     $params[] = $value->order_no;
   }
   $sql = "delete from orders where order_no in (" . join(",", $params) . ")";
   if(mysql_query($sql)==FALSE){
     $errors .= mysql_error();
   }

   //deal with those updated
   $sql = "";
   $updatedRecords = $json->{'updatedRecords'};
   foreach ($updatedRecords as $value){
     $sql = "update `orders` set ".
       "`employee`='".$value->employee . "', ".
       "`country`='".$value->country . "', ".
       "`customer`='".$value->customer . "', ".
       "`order2005`=".$value->order2005 . ", ".
       "`order2006`=".$value->order2006 . ", ".
       "`order2007`=".$value->order2007 . ", ".
       "`order2008`=".$value->order2008 . ", ".
       "`delivery_date`='".$value->delivery_date . "' ".
       "where `order_no`=".$value->order_no;
       if(mysql_query($sql)==FALSE){
         $errors .= mysql_error();
       }
   }

   //deal with those inserted
   $sql = "";
   $insertedRecords = $json->{'insertedRecords'};
   foreach ($insertedRecords as $value){
     $sql = "insert into orders (`employee`, `country`, `customer`, `order2005`,`order2006`, `order2007`, `order2008`, `delivery_date`) VALUES ('".
       $value->employee."', '".$value->country."', '".$value->customer."', '".$value->order2005."', '".$value->order2006."', '".$value->order2007."', '".$value->order2008."',  '".$value->delivery_date."')";
     if(mysql_query($sql)==FALSE){
       $errors .= mysql_error();
     }
   }

   $ret = "{success : true,exception:''}";
   echo $ret;
 }

The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3148/tbping

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by 頻尿Papasan at 2012-12-20 23:41
たった今、「Webページ上に、SQLite3の中身を一覧表示したいなあ」・・・などと考えながら、OwaさんちのWeb瓦版を見ていました。

Sigma Gridでは、編集もできるらしいのでいいですね。
MySQLでなくて、SQLite3でも、また、PHPじゃなくてZOPEで行なうことは可能なのでしょうか?

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by seko at 2012-12-21 07:12
Sigma Gridはローカル側のJavaScripなので、データをJSON形式でやり取りできれば、データベースや言語は何でも構いません。
上の例は、サーバサイドのですが、http://www.sigmawidgets.com/download.html から
sigma_grid_release.zip を落としてみてデモをローカルで動かしてみてください。
データの部分がJSONやリストになっているので、そこをZopeで動的に生成すればOKです。
マカロニさんは昨日もやってましたよ。

今回、PHPのデモ版を動かしてみたのは修正や追加の仕方が分からなかったからですが、上を見る限り、簡単なpython スクリプトでできそうですね。
ちなみにSigma GridのTutorial
http://sigmawidgets.com/forum/ajax-data-grid-view/sigma-grid-2-1-tutorial/
は見えなくなっているので、私は http://archive.org/index.php にアドレスをいれて中を見ました。

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by 頻尿Papasan at 2012-12-21 22:14
Sigma Gridは、pureなJavaScriptなんですね。
jQueryの他のData Gridも見ましたが、サーバーから渡すJSONデータが最もシンプルだったのが、このSigma Gridでした。

ushidayの日記を参考にして、Sekoさんが作られた上記PHPスクリプトを
ZopeサーバーのPythonに置き換えればなんとかなりそうです。

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by seko at 2012-12-22 07:37
>Sekoさんが作られた上記PHPスクリプトを
こんなスクリプトが私に書けるはずが有馬温泉。
PHP版のデモのついていたコードです。

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by Papasan at 2012-12-23 07:04
おかげさまで、Sigma Grid の表示までは出来ました。
つぎは、カラムの更新を調査します。

http://papasan.mydns.jp/misc-folder/data-grid-plugins#papacalendar

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by seko at 2012-12-24 15:01
>つぎは、カラムの更新を調査します。
分かったら教えてください。
正月休みにチャレンジしたいと思います。

Re:Sigma GridのPHP,MySQLデモを動かす

Posted by Papasan at 2012-12-25 23:30
>分かったら教えてください。

分かったので連絡します。
http://papasan.mydns.jp/misc-folder/data-grid-plugins#papacalendar

カラムの更新のみ行なっています、項目名の右に▼があるのが更新できる項目です。
全ての入力が終了したら、プリンタ横のデータベースアイコンをクリックすると、実際に更新の要求を出します。
遊んでみてくだされ。

pythonからphpScheduleItのMySQLにアクセスする

by seko posted at 2012-07-30 19:36 last modified 2012-07-30 21:52

あらかじめ、 http://lightson.dip.jp/blog/seko/2974 を適用しておくこと。

phpScheduleItでは、データベースにschedule_user@127.0.0.1の権限が与えられていたが、pythonからのはそのユーザで接続できなかった。localhostのユーザに権利をつけるたらOK.

mysql> GRANT ALL on phpscheduleit2.* to 'schedule_user'@'localhost' identified by 'password';

#! /usr/bin/python
# coding : utf-8

import MySQLdb

def get_value_from_db(sql_txt,dsn):
  # dsnを引数として渡すとうまく動かなかったので、とりあえず直書きする
    connect = MySQLdb.connect(db='phpscheduleit2', host='localhost', port=5432, user='schedule_user', passwd='password')
    cur = connect.cursor()

    cur.execute(sql_txt)
    r = cur.fetchone()
    fields=[]
    # cur.descriptionでフィールド名がとれる
    for item in cur.description:
        fields.append(item[0])
        print item

    values=[]
    while r:
        value_dic={}
        for index,field in enumerate(fields):
            value_dic[field] = r[index]
        values.append(value_dic)
        r = cur.fetchone()
    cur.close()
    connect.close()
    return values

### Main ####

dsn="db='phpscheduleit2', host='localhost', port=5432, user='schedule_user', passwd='password'"
sql_txt = 'select * from reservation_instances'

for k in get_value_from_db(sql_txt,dsn):
    print k

結果

時間はUTCで記録されているようです。

{'series_id': 1L, 'reference_number': '5011f29fc64b0', 'start_date': datetime.datetime(2012, 7, 27, 4, 0), 'end_date': datetime.datetime(2012, 7, 27, 4, 30), 'reservation_instance_id': 1L}
{'series_id': 2L, 'reference_number': '501206245c8c4', 'start_date': datetime.datetime(2012, 7, 27, 5, 0), 'end_date': datetime.datetime(2012, 7, 27, 5, 30), 'reservation_instance_id': 2L}
The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/2975/tbping

Powered by Plone, the Open Source Content Management System

This site conforms to the following standards: