python基礎教程廖雪峰云,python開發sqlite3完整_python開發_sqlite3_絕對完整

 2023-10-05 阅读 26 评论 0

摘要:#python?sqlitepython基礎教程廖雪峰云、#Author?:?Hongten#MailTo?:?[email?protected]#QQ?????:?648719819#Blog???:?http://www.cnblogs.com/hongten#Create?:?2013-08-09#Version:?1.0#DB-API?2.0?interface?for?SQLite?databasesimport?sqlite3import?os‘‘‘SQLite數據

#python?sqlite

python基礎教程廖雪峰云、#Author?:?Hongten

#MailTo?:?[email?protected]

#QQ?????:?648719819

#Blog???:?http://www.cnblogs.com/hongten

#Create?:?2013-08-09

#Version:?1.0

#DB-API?2.0?interface?for?SQLite?databases

import?sqlite3

import?os

‘‘‘SQLite數據庫是一款非常小巧的嵌入式開源數據庫軟件,也就是說

沒有獨立的維護進程,所有的維護都來自于程序本身。

在python中,使用sqlite3創建數據庫的連接,當我們指定的數據庫文件不存在的時候

連接對象會自動創建數據庫文件;如果數據庫文件已經存在,則連接對象不會再創建

數據庫文件,而是直接打開該數據庫文件。

連接對象可以是硬盤上面的數據庫文件,也可以是建立在內存中的,在內存中的數據庫

執行完任何操作后,都不需要提交事務的(commit)

創建在硬盤上面:?conn?=?sqlite3.connect(‘c:\\test\\test.db‘)

創建在內存上面:?conn?=?sqlite3.connect(‘"memory:‘)

下面我們一硬盤上面創建數據庫文件為例來具體說明:

conn?=?sqlite3.connect(‘c:\\test\\hongten.db‘)

其中conn對象是數據庫鏈接對象,而對于數據庫鏈接對象來說,具有以下操作:

commit()????????????--事務提交

rollback()??????????--事務回滾

close()?????????????--關閉一個數據庫鏈接

cursor()????????????--創建一個游標

cu?=?conn.cursor()

這樣我們就創建了一個游標對象:cu

在sqlite3中,所有sql語句的執行都要在游標對象的參與下完成

對于游標對象cu,具有以下具體操作:

execute()???????????--執行一條sql語句

executemany()???????--執行多條sql語句

close()?????????????--游標關閉

fetchone()??????????--從結果中取出一條記錄

fetchmany()?????????--從結果中取出多條記錄

fetchall()??????????--從結果中取出所有記錄

scroll()????????????--游標滾動

‘‘‘

#global?var

#數據庫文件絕句路徑

DB_FILE_PATH?=?‘‘

#表名稱

TABLE_NAME?=?‘‘

#是否打印sql

SHOW_SQL?=?True

def?get_conn(path):

‘‘‘獲取到數據庫的連接對象,參數為數據庫文件的絕對路徑

如果傳遞的參數是存在,并且是文件,那么就返回硬盤上面改

路徑下的數據庫文件的連接對象;否則,返回內存中的數據接

連接對象‘‘‘

conn?=?sqlite3.connect(path)

if?os.path.exists(path)?and?os.path.isfile(path):

print(‘硬盤上面:[{}]‘.format(path))

return?conn

else:

conn?=?None

print(‘內存上面:[:memory:]‘)

return?sqlite3.connect(‘:memory:‘)

def?get_cursor(conn):

‘‘‘該方法是獲取數據庫的游標對象,參數為數據庫的連接對象

如果數據庫的連接對象不為None,則返回數據庫連接對象所創

建的游標對象;否則返回一個游標對象,該對象是內存中數據

庫連接對象所創建的游標對象‘‘‘

if?conn?is?not?None:

return?conn.cursor()

else:

return?get_conn(‘‘).cursor()

###############################################################

####????????????創建|刪除表操作?????START

###############################################################

def?drop_table(conn,?table):

‘‘‘如果表存在,則刪除表,如果表中存在數據的時候,使用該

方法的時候要慎用!‘‘‘

if?table?is?not?None?and?table?!=?‘‘:

sql?=?‘DROP?TABLE?IF?EXISTS?‘?+?table

if?SHOW_SQL:

print(‘執行sql:[{}]‘.format(sql))

cu?=?get_cursor(conn)

cu.execute(sql)

conn.commit()

print(‘刪除數據庫表[{}]成功!‘.format(table))

close_all(conn,?cu)

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

def?create_table(conn,?sql):

‘‘‘創建數據庫表:student‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

cu?=?get_cursor(conn)

if?SHOW_SQL:

print(‘執行sql:[{}]‘.format(sql))

cu.execute(sql)

conn.commit()

print(‘創建數據庫表[student]成功!‘)

close_all(conn,?cu)

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

###############################################################

####????????????創建|刪除表操作?????END

###############################################################

def?close_all(conn,?cu):

‘‘‘關閉數據庫游標對象和數據庫連接對象‘‘‘

try:

if?cu?is?not?None:

cu.close()

finally:

if?cu?is?not?None:

cu.close()

###############################################################

####????????????數據庫操作CRUD?????START

###############################################################

def?save(conn,?sql,?data):

‘‘‘插入數據‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

if?data?is?not?None:

cu?=?get_cursor(conn)

for?d?in?data:

if?SHOW_SQL:

print(‘執行sql:[{}],參數:[{}]‘.format(sql,?d))

cu.execute(sql,?d)

conn.commit()

close_all(conn,?cu)

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

def?fetchall(conn,?sql):

‘‘‘查詢所有數據‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

cu?=?get_cursor(conn)

if?SHOW_SQL:

print(‘執行sql:[{}]‘.format(sql))

cu.execute(sql)

r?=?cu.fetchall()

if?len(r)?>?0:

for?e?in?range(len(r)):

print(r[e])

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

def?fetchone(conn,?sql,?data):

‘‘‘查詢一條數據‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

if?data?is?not?None:

#Do?this?instead

d?=?(data,)

cu?=?get_cursor(conn)

if?SHOW_SQL:

print(‘執行sql:[{}],參數:[{}]‘.format(sql,?data))

cu.execute(sql,?d)

r?=?cu.fetchall()

if?len(r)?>?0:

for?e?in?range(len(r)):

print(r[e])

else:

print(‘the?[{}]?equal?None!‘.format(data))

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

def?update(conn,?sql,?data):

‘‘‘更新數據‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

if?data?is?not?None:

cu?=?get_cursor(conn)

for?d?in?data:

if?SHOW_SQL:

print(‘執行sql:[{}],參數:[{}]‘.format(sql,?d))

cu.execute(sql,?d)

conn.commit()

close_all(conn,?cu)

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

def?delete(conn,?sql,?data):

‘‘‘刪除數據‘‘‘

if?sql?is?not?None?and?sql?!=?‘‘:

if?data?is?not?None:

cu?=?get_cursor(conn)

for?d?in?data:

if?SHOW_SQL:

print(‘執行sql:[{}],參數:[{}]‘.format(sql,?d))

cu.execute(sql,?d)

conn.commit()

close_all(conn,?cu)

else:

print(‘the?[{}]?is?empty?or?equal?None!‘.format(sql))

###############################################################

####????????????數據庫操作CRUD?????END

###############################################################

###############################################################

####????????????測試操作?????START

###############################################################

def?drop_table_test():

‘‘‘刪除數據庫表測試‘‘‘

print(‘刪除數據庫表測試...‘)

conn?=?get_conn(DB_FILE_PATH)

drop_table(conn,?TABLE_NAME)

def?create_table_test():

‘‘‘創建數據庫表測試‘‘‘

print(‘創建數據庫表測試...‘)

create_table_sql?=?‘‘‘CREATE?TABLE?`student`?(

`id`?int(11)?NOT?NULL,

`name`?varchar(20)?NOT?NULL,

`gender`?varchar(4)?DEFAULT?NULL,

`age`?int(11)?DEFAULT?NULL,

`address`?varchar(200)?DEFAULT?NULL,

`phone`?varchar(20)?DEFAULT?NULL,

PRIMARY?KEY?(`id`)

)‘‘‘

conn?=?get_conn(DB_FILE_PATH)

create_table(conn,?create_table_sql)

def?save_test():

‘‘‘保存數據測試...‘‘‘

print(‘保存數據測試...‘)

save_sql?=?‘‘‘INSERT?INTO?student?values?(?,??,??,??,??,??)‘‘‘

data?=?[(1,?‘Hongten‘,?‘男‘,?20,?‘廣東省廣州市‘,?‘13423****62‘),

(2,?‘Tom‘,?‘男‘,?22,?‘美國舊金山‘,?‘15423****63‘),

(3,?‘Jake‘,?‘女‘,?18,?‘廣東省廣州市‘,?‘18823****87‘),

(4,?‘Cate‘,?‘女‘,?21,?‘廣東省廣州市‘,?‘14323****32‘)]

conn?=?get_conn(DB_FILE_PATH)

save(conn,?save_sql,?data)

def?fetchall_test():

‘‘‘查詢所有數據...‘‘‘

print(‘查詢所有數據...‘)

fetchall_sql?=?‘‘‘SELECT?*?FROM?student‘‘‘

conn?=?get_conn(DB_FILE_PATH)

fetchall(conn,?fetchall_sql)

def?fetchone_test():

‘‘‘查詢一條數據...‘‘‘

print(‘查詢一條數據...‘)

fetchone_sql?=?‘SELECT?*?FROM?student?WHERE?ID?=???‘

data?=?1

conn?=?get_conn(DB_FILE_PATH)

fetchone(conn,?fetchone_sql,?data)

def?update_test():

‘‘‘更新數據...‘‘‘

print(‘更新數據...‘)

update_sql?=?‘UPDATE?student?SET?name?=???WHERE?ID?=???‘

data?=?[(‘HongtenAA‘,?1),

(‘HongtenBB‘,?2),

(‘HongtenCC‘,?3),

(‘HongtenDD‘,?4)]

conn?=?get_conn(DB_FILE_PATH)

update(conn,?update_sql,?data)

def?delete_test():

‘‘‘刪除數據...‘‘‘

print(‘刪除數據...‘)

delete_sql?=?‘DELETE?FROM?student?WHERE?NAME?=???AND?ID?=???‘

data?=?[(‘HongtenAA‘,?1),

(‘HongtenCC‘,?3)]

conn?=?get_conn(DB_FILE_PATH)

delete(conn,?delete_sql,?data)

###############################################################

####????????????測試操作?????END

###############################################################

def?init():

‘‘‘初始化方法‘‘‘

#數據庫文件絕句路徑

global?DB_FILE_PATH

DB_FILE_PATH?=?‘c:\\test\\hongten.db‘

#數據庫表名稱

global?TABLE_NAME

TABLE_NAME?=?‘student‘

#是否打印sql

global?SHOW_SQL

SHOW_SQL?=?True

print(‘show_sql?:?{}‘.format(SHOW_SQL))

#如果存在數據庫表,則刪除表

drop_table_test()

#創建數據庫表student

create_table_test()

#向數據庫表中插入數據

save_test()

def?main():

init()

fetchall_test()

print(‘#‘?*?50)

fetchone_test()

print(‘#‘?*?50)

update_test()

fetchall_test()

print(‘#‘?*?50)

delete_test()

fetchall_test()

if?__name__?==?‘__main__‘:

main()

原文:http://my.oschina.net/sanpeterguo/blog/293880

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/113797.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息