#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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态