con = sqlite3.connect("data.db", isolation_level=None)
2014年6月29日日曜日
[Python][SQLite]データ登録後 Commit を不要にする
DB を開く時に isolation_level=None を指定することでデータ登録後に Commit を実行する必要がなくなる。
[Python][SQLite]使い方
Python 2.5 から SQLite3 が標準で使えるようになっている。
# -*- coding: utf-8 -*- import sqlite3 needCommit = 0 # Database を開く if needCommit == 1: con = sqlite3.connect("data.db"); else: con = sqlite3.connect("data.db", isolation_level=None); # Commit 不要 # Table 作成 sql = u"CREATE TABLE test(ID INT PRIMARY KEY, NAME TEXT NOT NULL);" con.execute(sql) # データ登録 sql = u"INSERT INTO test(ID, NAME) values (0, 'aaa');" con.execute(sql) # データ登録 その 2 sql = u"INSERT INTO test(ID, NAME) values (?, ?);" con.execute(sql, (1, "bbb")) con.execute(sql, (2, "ccc")) if needCommit == 1: con.commit() # レコード取得 c = con.cursor() c.execute("SELECT * FROM test") for row in c: print row[0], row[1] # Database を閉じる con.close();実行結果
> python sqlite.py 0 aaa 1 bbb 2 ccc各処理を関数化、テーブルが作成済みの場合は最初に drop する処理を追加
# -*- coding: utf-8 -*- import sqlite3 # Database を開く def connectDb(): print "Connect DB" con = sqlite3.connect("data.db", isolation_level=None); return con # Table 作成 def createTable(con, name): print "Create table"; sql = "CREATE TABLE %s(ID INT PRIMARY KEY, NAME TEST NOT NULL);" % name con.execute(sql) # データ登録 def addData(con, id, name): print "Add data (%d %s)" % (id, name) sql = "INSERT INTO test(ID, NAME) values(%d, '%s');" % (id, name) print sql; con.execute(sql) # 全レコード表示 def showAllRecord(con): c = con.cursor() c.execute("SELECT * FROM test") for row in c: print row[0], row[1] # Database を閉じる def closeDb(con): print "Close database" con.close() # テーブル一覧表示 def showAllTables(con): c = con.cursor() c.execute("SELECT NAME FROM sqlite_master WHERE type='table'") for row in c: print row[0] # テーブル作成済みか確認 def alreadyCreatedTable(con, name): c = con.cursor() c.execute("SELECT NAME FROM sqlite_master WHERE type='table'") for row in c: if row[0] == name: print "Found %s" % name; return 1 return 0 # Drop table def dropTable(con, name): print "Drop table %s" % name sql = "DROP TABLE %s;" % name con.execute(sql) # メイン処理 con = connectDb() showAllTables(con) if alreadyCreatedTable(con, 'test') == 1: dropTable(con, 'test') createTable(con, 'test') showAllTables(con) alreadyCreatedTable(con, 'test') addData(con, 0, 'aaa') addData(con, 1, 'bbb') addData(con, 2, 'ccc') showAllRecord(con) closeDb(con)実行結果
> python sqlite2.py Connect DB Create table test Found test Add data (0 aaa) INSERT INTO test(ID, NAME) values(0, 'aaa'); Add data (1 bbb) INSERT INTO test(ID, NAME) values(1, 'bbb'); Add data (2 ccc) INSERT INTO test(ID, NAME) values(2, 'ccc'); 0 aaa 1 bbb 2 ccc Close database > python sqlite2.py Connect DB test Found test Drop table test Create table test Found test Add data (0 aaa) INSERT INTO test(ID, NAME) values(0, 'aaa'); Add data (1 bbb) INSERT INTO test(ID, NAME) values(1, 'bbb'); Add data (2 ccc) INSERT INTO test(ID, NAME) values(2, 'ccc'); 0 aaa 1 bbb 2 ccc Close database
[Python]FTP - カレントディレクトリのファイルをアップロードする
ソースコード
# -*- coding: utf-8 -*- import os import re import ftplib # カレントディレクトリのファイルをアップロードする ## Upload files def uploadFiles(top, exp): for filename in os.listdir(top): if re.search(exp, filename): print top + filename f = file(filename, 'rb') ftp.storbinary('STOR ' + filename, f) f.close() # カレントディレクトリのファイル一覧を取得 user='username' password='password' server='servername' currentDir = '' dstDir = '' ftp = ftplib.FTP(server) ftp.login(user, password) uploadFiles('./', 'txt$') ftp.quit()実行結果
> python test02.py ./test.txt ./test02.txt ./test03.txt
[Python]FTP - サーバーにファイルを置く
ソースコード
# -*- coding: utf-8 -*- import ftplib # サーバーにファイルを置く (STOR) user='username' password='password' server='servername' filename='test.txt' ftp = ftplib.FTP(server) ftp.login(user, password) f = file(filename, 'rb') ftp.storbinary('STOR ' + filename, f) f.close() ftp.quit()実行結果
> python test01.py
[Python]FTP - サーバーログイン/ログアウト
ソースコード
# -*- coding: utf-8 -*- import ftplib # サーバーにログインしファイルリストを取得する (LIST) user='username' password='password' server='servername' ftp = ftplib.FTP(server) ftp.login(user, password) ftp.retrlines('LIST') ftp.quit()実行結果
> python test00.py drwxr-xr-x 19 username 503 4096 Sep 14 11:44 . drwxr-xr-x 19 username 503 4096 Sep 14 11:44 .. -rw-r--r-- 1 username 503 4802 Sep 14 11:45 index.html
[MySQL][Python]MySQLdb
使い方
データ挿入 (INSERT) 後は commit しないと DB に登録されないので注意。
# -*- coding:utf-8 -*- import MySQLdb # DB に接続 db = MySQLdb.connect(user="user", passwd="password", db="test", charset="utf8") # SELECT db.query("SELECT * FROM score") result = db.store_result() # 表示 num = result.num_rows() for row in result.fetch_row(num): print row # INSERT q = "INSERT INTO `test`.`score` (`id`, `user_id`, `score`)" q += " VALUES (NULL, '1', '97');" print "%s" % (q) db.query(q) # データ挿入後は commit db.commit() # Close db.close()
登録:
投稿 (Atom)