翻訳:python標準ライブラリマニュアルのSqlite 3(一)

2137 ワード

まず、sqliteデータベースを接続および操作するには、データベース接続オブジェクトを作成する必要があります.その後の操作は、このオブジェクトに基づいています.
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)