python自带模块连接数据库_Python模块Sqlite数据库模块
Python模塊Sqlite數(shù)據(jù)庫模塊簡介
從Python2.5以后的版本開始引入SQLite,屬于Python內(nèi)置模塊,不需要額外安裝。Sqlite以小巧快捷著稱。SQLite第一個Alpha版本誕生于2000年5月. 至今已經(jīng)有很多年了,SQLite也迎來了一個版本 SQLite 3已經(jīng)發(fā)布。
Python模塊Sqlite數(shù)據(jù)庫模塊常用方法簡介
1. 創(chuàng)建/打開數(shù)據(jù)庫
在調(diào)用connect函數(shù)的時候,指定庫名稱,如果指定的數(shù)據(jù)庫存在就直接打開這個數(shù)據(jù)庫,如果不存在就創(chuàng)建數(shù)據(jù)庫再打開。
#在文件中創(chuàng)建數(shù)據(jù)庫
cx = sqlite3.connect("E:/test.db")
1
2
#在文件中創(chuàng)建數(shù)據(jù)庫
cx=sqlite3.connect("E:/test.db")
2.數(shù)據(jù)庫連接對象
開數(shù)據(jù)庫時返回的對象cx就是一個數(shù)據(jù)庫連接對象,它可以有以下操作:
commit()--事務(wù)提交
rollback()--事務(wù)回滾
close()--關(guān)閉一個數(shù)據(jù)庫連接
cursor()--創(chuàng)建一個游標
1
2
3
4
commit()--事務(wù)提交
rollback()--事務(wù)回滾
close()--關(guān)閉一個數(shù)據(jù)庫連接
cursor()--創(chuàng)建一個游標
關(guān)于commit(),如果isolation_level隔離級別默認,那么每次對數(shù)據(jù)庫的操作,都需要使用該命令,你也可以設(shè)置isolation_level=None,這樣就變?yōu)樽詣犹峤荒J健?/p>
3.使用游標查詢數(shù)據(jù)庫
我們需要使用游標對象SQL語句查詢數(shù)據(jù)庫,獲得查詢對象。 通過以下方法來定義一個游標。
cu=cx.cursor()
1
cu=cx.cursor()
游標對象有以下的操作:
execute()--執(zhí)行sql語句
executemany--執(zhí)行多條sql語句
close()--關(guān)閉游標
fetchone()--從結(jié)果中取一條記錄,并將游標指向下一條記錄
fetchmany()--從結(jié)果中取多條記錄
fetchall()--從結(jié)果中取出所有記錄
scroll()--游標滾動
1
2
3
4
5
6
7
execute()--執(zhí)行sql語句
executemany--執(zhí)行多條sql語句
close()--關(guān)閉游標
fetchone()--從結(jié)果中取一條記錄,并將游標指向下一條記錄
fetchmany()--從結(jié)果中取多條記錄
fetchall()--從結(jié)果中取出所有記錄
scroll()--游標滾動
4. 建表
cu.execute(“create table table_py40 (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)”)
上面語句創(chuàng)建了一個叫table_py40的表,它有一個主鍵id,一個pid,和一個name,name是不可以重復(fù)的,以及一個nickname默認為NULL。
5. 插入數(shù)據(jù)
#請注意避免以下寫法:
# Never do this -- insecure 會導(dǎo)致注入攻擊
pid=200
c.execute("... where pid = '%s'" % pid)
#正確的做法如下,如果t只是單個數(shù)值,也要采用t=(n,)的形式,因為元組是不可變的。
for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
cx.execute("insert into table_py40 values (?,?,?,?)", t)
#簡單的插入兩行數(shù)據(jù),不過需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫連接對象cx來進行提交commit和回滾rollback操作.
cx.commit()
1
2
3
4
5
6
7
8
9
10
11
#請注意避免以下寫法:
# Never do this -- insecure 會導(dǎo)致注入攻擊
pid=200
c.execute("... where pid = '%s'"%pid)
#正確的做法如下,如果t只是單個數(shù)值,也要采用t=(n,)的形式,因為元組是不可變的。
fortin[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
cx.execute("insert into table_py40 values (?,?,?,?)",t)
#簡單的插入兩行數(shù)據(jù),不過需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫連接對象cx來進行提交commit和回滾rollback操作.
cx.commit()
6.查詢
cu.execute("select * from table_py40")
1
cu.execute("select * from table_py40")
要獲取查詢到的數(shù)據(jù),使用游標的fetch函數(shù),如:
In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]
1
2
In[10]:cu.fetchall()
Out[10]:[(0,10,u'abc',u'Yu'),(1,20,u'cba',u'Xu')]
如果我們使用cu.fetchone(),則首先返回列表中的第一項,再次使用,則返回第二項,依次下去.
7.修改
In [12]: cu.execute("update table_py40 set name='Boy' where id = 0")
In [13]: cx.commit()
1
2
In[12]:cu.execute("update table_py40 set name='Boy' where id = 0")
In[13]:cx.commit()
注意,修改數(shù)據(jù)以后commit提交
8.刪除
cu.execute("delete from table_py40 where id = 1")
cx.commit()
1
2
cu.execute("delete from table_py40 where id = 1")
cx.commit()
9.使用中文
請先確定你的IDE或者系統(tǒng)默認編碼是utf-8,并且在中文前加上u
x=u'魚'
cu.execute("update table_py40 set name=? where id = 0",x)
cu.execute("select * from table_py40")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]
1
2
3
4
5
x=u'魚'
cu.execute("update table_py40 set name=? where id = 0",x)
cu.execute("select * from table_py40")
cu.fetchall()
[(0,10,u'\u9c7c',u'Yu'),(1,20,u'cba',u'Xu')]
如果要顯示出中文字體,那需要依次打印出每個字符串
In [26]: for item in cu.fetchall():
....: for element in item:
....: print element,
....:
0 10 魚 Yu
1 20 cba Xu
1
2
3
4
5
6
7
In[26]:foritemincu.fetchall():
....:forelementinitem:
....:printelement,
....:
010魚Yu
120cbaXu
總結(jié)
以上是生活随笔為你收集整理的python自带模块连接数据库_Python模块Sqlite数据库模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 生成数列_PHP生成器的创建
- 下一篇: php如何取消bak自动备份_教你如何进