參考資料:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001388320596292f925f46d56ef4c80a1c9d8e47e2d5711000
Python定義了一套操作數據庫的API接口,任何數據庫要連接到Python,只需要提供符合Python標準的數據庫驅動即可。
由於SQLite的驅動內置在Python標準庫中,所以我們可以直接來操作SQLite數據庫。Python就內置了SQLite3。
下面是我的學習代碼:
import sqlite3
#創建SQLITE表 db-數據庫文件名 tablename-表名 fields-字段定義列表
#返回值:0-成功 1-打開數據庫失敗 2-遊標錯誤 3-其他異常
def createTable(db, tablename, fields):
code = 0
error = None
try:
conn = sqlite3.connect(db)
if conn:
cursor = conn.cursor()
if cursor:
sFields = ''
for s in fields:
if sFields != '':
sFields = sFields + ','
sFields = sFields + s
sql = 'CREATE TABLE %s(%s)' % (tablename, sFields)
cursor.execute(sql)
cursor.close()
cursor = None
conn.commit()
else:
code = 2
conn.close()
conn = None
else:
code = 1
except BaseException, e:
code = 3
error = e.message
finally:
if cursor:
cursor.close()
if conn:
conn.close()
return (code, error)
#讀取表字段列表 db-數據庫文件 table-表名
#返回值 字段列表,錯誤碼(1-打開數據庫失敗 2-遊標錯誤 3-其他異常),錯誤信息
def getFields(db, table):
fields = None
code = 0
error = None
try:
conn = sqlite3.connect(db)
if conn:
cursor = conn.cursor()
if cursor:
sql = 'PRAGMA table_info(%s)' % table
cursor.execute(sql)
fields = []
for c in cursor:
fields.append(c[1])
cursor.close()
cursor = None
conn.commit()
else:
code = 2
conn.close()
conn = None
else:
code = 1
except BaseException, e:
code = 3
error = e.message
finally:
if cursor:
cursor.close()
if conn:
conn.close()
return (code, error, fields)
#執行SQL語句 db-數據庫文件 sql-要執行的SQL語句
#返回值 錯誤碼(1-打開數據庫失敗 2-遊標錯誤 3-其他異常),錯誤信息
def executeSQL(db, sql):
code = 0
error = None
try:
conn = sqlite3.connect(db)
if conn:
cursor = conn.cursor()
if cursor:
cursor.execute(sql)
cursor.close()
cursor = None
conn.commit()
else:
code = 2
conn.close()
conn = None
else:
code = 1
except BaseException, e:
code = 3
error = e.message
finally:
if cursor:
cursor.close()
if conn:
conn.close()
return (code, error)
#獲取sql執行結果
#返回值 結果列表,錯誤碼(1-打開數據庫失敗 2-遊標錯誤 3-其他異常),錯誤信息
def getValues(db, sql):
values = None
code = 0
error = None
try:
conn = sqlite3.connect(db)
if conn:
cursor = conn.cursor()
if cursor:
cursor.execute(sql)
values = cursor.fetchall()
cursor.close()
cursor = None
conn.commit()
else:
code = 2
conn.close()
conn = None
else:
code = 1
except BaseException, e:
code = 3
error = e.message
finally:
if cursor:
cursor.close()
if conn:
conn.close()
return (code, error, values)
#測試入口
def Test():
#輸入數據庫文件名
d = raw_input('input a database filename:')
#輸入表名
t = raw_input('input a tablename:')
#輸入字段定義
fields = []
while True:
f = raw_input('input field define, none to break:')
if f and f != '':
fields.append(f)
else:
break
#創建表
ecode, emsg = createTable(d, t, fields)
if ecode == 0:
print 'create successfull!'
else:
print 'create failure, error: %d, %s' % (ecode, emsg)
#獲取字段
ecode, emsg, fields = getFields(d, t)
if ecode == 0:
ff = ''
vv = ''
i = 0
for f in fields:
if i > 0:
ff = ff + ','
vv = vv + ','
ff = ff + f
vv = vv + str(i)
i = i + 1
#執行SQL語句
sql = 'INSERT INTO %s(%s)VALUES(%s)' % (t, ff, vv)
print 'excute sql:', sql
ecode, emsg = executeSQL(d, sql)
if ecode == 0:
#執行SQL語句並返回結果集
ecode, emsg, values = getValues(d, 'SELECT * FROM %s' % t)
if ecode == 0:
print 'values of table %s:' % t
print values
else:
print 'error on getValues table %s:%d %s' % (t, ecode, emsg)
else:
print 'error on excute sql:%d %s' % (ecode, emsg)
else:
print 'error to read fields of table %s:%d %s' % (t, ecode, emsg)
今天就學習到這裏,下一節從MySQL學起。