翻訳:python標準ライブラリマニュアルのSqlite 3(一)
まず、sqliteデータベースを接続および操作するには、データベース接続オブジェクトを作成する必要があります.その後の操作は、このオブジェクトに基づいています.
接続の確立が完了すると、ポインタオブジェクトCursorを作成し、excuteメソッドを使用してsql文を実行できます.
通常pythonのsql操作ではpython変数が使用されます.しかし、文字列変数を直接使用するのは安全ではありません.sql注入攻撃を受けやすくなります.(ここに注入攻撃に関する漫画がありますhttp://xkcd.com/327/)
代わりに、DB-APIのパラメータを使用することができます.「?」を使うことでプレースホルダ.その後、メタグループ形式の変数が入力されます.例:
クエリー文を実行すると、クエリー結果はcuを通過することができる.fetchone()は1行を取得し、cuを使用することもできる.fetchall()はリストを取得し、変数に転送することもできます.
import sqlite3
conn = sqlite3.connect('example.db')
# sqlite , :memory:
#conn = sqllite3.connect(':memory:')
接続の確立が完了すると、ポインタオブジェクトCursorを作成し、excuteメソッドを使用してsql文を実行できます.
# :
cu = conn.cursor()
#
cu.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# Insert a row of data
cu.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
# ( ( Save (commit) the changes
conn.commit()
# We can also close the connection if we are done with it.
# Just be sure any changes have been committed or they will be lost.
#
conn.close()
通常pythonのsql操作ではpython変数が使用されます.しかし、文字列変数を直接使用するのは安全ではありません.sql注入攻撃を受けやすくなります.(ここに注入攻撃に関する漫画がありますhttp://xkcd.com/327/)
代わりに、DB-APIのパラメータを使用することができます.「?」を使うことでプレースホルダ.その後、メタグループ形式の変数が入力されます.例:
# !
symbol = 'RHAT'
cu.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
#
t = ('RHAT',)#
cu.execute("SELECT * FROM stocks WHERE symbol = ?" % t) # ?
# :
#1
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]
#
cu.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
クエリー文を実行すると、クエリー結果はcuを通過することができる.fetchone()は1行を取得し、cuを使用することもできる.fetchall()はリストを取得し、変数に転送することもできます.
for row in c.execute('SELECT * FROM stocks ORDER BY price'):
print(row)
('2006-01-05', 'BUY', 'RHAT', 100, 35.14)
('2006-03-28', 'BUY', 'IBM', 1000, 45.0)
('2006-04-06', 'SELL', 'IBM', 500, 53.0)
('2006-04-05', 'BUY', 'MSFT', 1000, 72.0)