Sqlite3資料庫
sqlite3子產品并非隻能操作sqlite3資料庫,所有sql的資料庫都可以進行操作,如mysql,sqlite3子產品隻是提供了python與sql資料庫的接口。
1.建立一個連接配接:db
= sqlite3.connect(filename)
#此處的connect的參數是一個檔案路徑(*.sdb檔案),并非是網絡連接配接(IP:Port)
#db是資料庫連接配接的一個對象,主要是對資料庫整體的操作,比如:
db.commit()
----使用遊标執行完sql語句後,用資料庫連接配接對象db來進行事物送出
db.rollback()
----事物復原
db.close()
----關閉資料庫連接配接
db.cursor()
----建立遊标
2.建立一個操作資料庫的遊标:cu
= db.cursor()
#建立遊标是為了對資料庫執行sql語句,所有sql語句的操作都是由遊标來執行的
#遊标可以對資料庫的表執行具體的sql語言
cu.execute()
----執行一條sql語句
cu.fetchone()
----從執行完execute後的結果中,取出一條記錄
cu.fetchmany(size)
----從執行完execute後的結果中,取出多條記錄
cu.all()
----從執行完execute後的結果中,取出全部記錄
cu.close()
----遊标關閉
cu.scroll()
----遊标滾動
重點講一下
cu.fetchone(),cu.fetchmany(size),cu.fetall()三個函數:
--------------------在執行查詢語句後,Python将傳回一個循環器,包含有查詢獲得的多個記錄------------------
三個的傳回值都是序列,序列内的内容是cu.execute(sql)執行後得到的内容,換句話說,如果,遊标在沒有進行sql語句執行的時候調用以上三者,得到的都是空序列。隻有執行了cu.execute(sql)後,此時的cu遊标是有查詢結果的,是以掉用cu.fetchone(),cu.fetchmany(size),cu.fetall()時,可以獲得一個序列,序列内是sql語句獲得的結果,結果數量分别為一條,size條和全部。
例子:
cu.execute("select
name,age,sex from student")
則,如果有資料,則python的資料是這樣的:
[(
name1,age1,sex1),(name2,age2,sex2),.............,(nameN,ageN,sexN)]
當使用cu.fetchone(),隻獲得一條資料,則内容為[(name1,age1,sex1)],可看作一個集合{name1,age1,sex1}
利用python特性可得 a,b,c = cufetchone()
a=name1
b=age1
c=sex1
當使用cu.fetall()時,獲得的結果是:
[(
name1,age1,sex1),(name2,age2,sex2),.............,(nameN,ageN,sexN)]
2.pymysql(python3.x後不再支援Mysqldb)
Linux下直接pip3
install pymysql即可安裝
pymysql子產品與sqlite3子產品最大的差別是,pymysql子產品提供網絡連接配接資料庫模式。
db =
pymysql.connect()
pymssql.connect()來初始化連接配接類,它允許如下的參數(全部為關鍵字參數):
dsn:連接配接字元串,主要用于與之前版本的pymssql相容(基本可以忽略)
user:使用者名
password:密碼
trusted:布爾值,指定是否使用windows身份認證登陸
host
:主機名(可以使用形式)
database:資料庫(mysql中的哪個庫)
timeout:查詢逾時
login_timeout:登陸逾時
charset:資料庫的字元集
as_dict:布爾值,指定傳回值是字典還是元組
max_conn:最大連接配接數
其他操作于sqlite3子產品是類似的,都是建立連接配接後建立遊标,使用execute和fetchone來執行sql語句和擷取結果。