第13章 資料庫支援
阿新 • • 發佈:2018-12-10
13.1 Python資料庫API
13.2 SQLite和PySQLite SQLite小型資料庫引擎,可直接使用本地檔案,而不需要集中式資料庫儲存機制。 使用模組sqlite3實現的PySQLite。
13.2.1 起步
>>> import sqlite3
#建立直接到資料庫檔案的連線
>>> conn = sqlite3.connect('somedatabase.db')
#從連接獲得遊標,遊標可用來執行SQL查詢
>>> curs = conn.cursor()
#修改了資料,提交修改
>>> conn.commit()
#關閉連線
>>> conn.close()
>>>
13.2.2 資料庫應用程式示例
import sqlite3
def convert(value):
if value.startswith('~'):
return value.strip('~')
if not value:
value = '0'
return float(value)
conn = sqlite3.connect('food.db')
curs = conn.cursor()
curs.execute('''
CREATE TABLE food (
id TEXT PRIMAKY KEY,
desc TEXT,
water FLOAT,
kcal FLOAT,
protein FLOAT,
fat FLOAT,
ash FLOAT,
carbs FLOAT,
fiber FLOAT,
sugar FLOAT
)
''' )
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
field_count = 10
for line in open('ABBREV.txt'):
fields = line.split('^')
vals = [convert(f) for f in fields[:field_count]]
curs.execute(query, vals)
conn.commit()
conn.close()
import sqlite3
conn = sqlite3.connect('food.db')
curs = conn.cursor()
query = 'SELECT * FROM food WHERE id = "07276"'
print(query)
curs.execute(query)
print("curs.description:",curs.description)
names = [f[0] for f in curs.description]
print("names:", names)
for row in curs.fetchall():
print("row:",row)
print("zip(names, row):",zip(names, row))
for pair in zip(names, row):
print('{}: {}'.format(*pair))
print()