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)