Python學習筆記(二十一)sqlite數據庫

參考資料: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學起。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章