天天看點

sqlite3和mysql語句_sqlite3和Mysqldb

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語句和擷取結果。