トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71でPython-MySQLdbでCRUD のバックアップの現在との差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*E71でPython-MySQLdbでCRUD [#n0ecfa2a]

タイトルの日本語がおかしいですが、Python-MySQLdbでCRUDやってみた記録です。

※CRUD:Create、Read、Update、Deleteの略

参照(select文)は[[E71でPython-MySQLdbの動作確認]]でやってますんで、更新系を中心にやってみます。

***Insert文 [#h926334d]

早速やってみました。MySQLへの接続は前回と同様です。&br;

 Python 2.2.2 (#0, Nov  7 2008, 14:24:30) [C] on symbian_s60
 Type "copyright", "credits" or "license" for more information.
 (InteractiveConsole)
 >>> import MySQLdb
 >>> conn = MySQLdb.connect(db="test_db", host="127.0.0.1", user="root",passwd="")
 >>> 
 >>> cur = conn.cursor()
 >>> 

ここまでで、MySQLへの接続、SQL文実行準備が完了!&br;
&br;
早速Insert文を発行してみる。&br;

 >>> cur.execute('''insert into test values ('jiro','pass1')''')
 1L
&br;
insert文は、中でシングルクオートを使うので、「'''」でくるみます。~
発行した結果、「1L」って出力されているので、なんか成功したっぽい。~
本当に入っているか、selectしてみる。&br;

 >>> cur.execute('select * from test')
 >>> 
 1L
 >>> rows = cur.fetchall()
 >>> for row in rows:
 ...   print row[0],row[1]
 ... 
 jiro pass1
 >>> 
&br;
うん、ちゃんと入ってる。じゃあ、ロールバックしてみよう!
&br;

 >>> conn.rollback()
 >>> 
&br;
ちゃんとロールバックされているか、確認
&br;

 >>> cur.execute('select * from test')
 1L
 >>> for row in rows:
 ...   print row[0],row[1]
 ... 
 jiro pass1
 >>>
&br;
あら?ロールバックされていない・・・~
もしかして、デフォルトでオートコミット??~
&br;
MySQLuiから確認しても、レコードは挿入されてる。
&br;

ってことは、デフォルトでオートコミットなのね笑。
&br;

調べてみると、以下のサイトに、MySQLはデフォルトでオートコミットが有効だ、って書いてありました。
-http://dev.mysql.com/doc/refman/4.1/ja/commit.html
※MySQLのオートコミットについては[[E71でのMySQLのオートコミット無効化について]]で調べてます。

さらに調べると、MySQLはシステムパラメータではオートコミットを無効にできない、とかいてある。同様の機能を実現するためには、接続するコネクションごとに、オートコミットをオフにする設定を入れてあげればいいらしい。~

-http://d.hatena.ne.jp/shibainu55/20081130/1228005830
-http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_init_connect
サイトに書いてあるとおりに、早速以下の内容を、E71にMySQLの設定ファイルに設定してみる。
***update文、delete文 [#xdb9c42f]
updateもdeleteも、使い方はinsertと同じです。

 [mysqld]
 init_connect='SET autocommit=0'
 >>> conn = MySQLdb.connect(db="test_db", host="127.0.0.1", user="testuser")
 >>> 
 >>> cur = conn.cursor()
 >>> 
 >>> cur.execute('select * from test') ←1
 2L
 >>> 
 >>> rows = cur.fetchall()
 >>> 
 >>> for row in rows:
 ...   print row[0],row[1]
 ... 
 jiro jiropass
 saburo sabupass ←2
 >>> 
 >>> cur.execute('''update test set user='satoru' where user='saburo' ''') ←3
 1L
 >>> cur.execute('select * from test')
 2L
 >>> 
 >>> rows = cur.fetchall()
 >>> 
 >>> for row in rows:
 ...   print row[0]
 jiro
 satoru ←4
 >>> 
 >>> cur.execute('''delete from test where user='satoru' ''') ←5
 1L
 >>> 
 >>> cur.execute('select * from test')
 1L
 >>> 
 >>> rows = cur.fetchall()
 >>> 
 >>> for row in rows:
 ...   print row[0]
 jiro ←6
 >>>
 >>> cur.close
 <bound method Cursor.close of <MySQLdb.cursors.Cursor object at 0x174c8d0>>
 >>> conn.close
 <built-in method close of Connection object at 0x726430>
 >>> 

各行の解説
+事前データの確認用select文
+2行結果が返ってきて、その2行目をupdate、delete対象とする
+update文を発行
+2行目がsatoruにupdateされていることを確認
+delete文を発行
+deleteされていることを確認

***感想 [#w3cae393]
とりあえず、python-MySQLの疎通は完了ということで。

しかし、pythonのコンソールって、ちょっと動かしたいときにすごい便利ですね~