pymsql是利用Python鏈接mysql數據庫的庫python
Python3上有很好的支持, 同時在Python2中也可使用mysql
conn = pymysql.connect(host='127.0.0.1', user='root', password='root', database='practise')
使用connect()函數能夠建立一個鏈接對象sql
須要傳入的參數包括數據庫
host: 數據庫的IP地址安全
user: 登陸數據庫的用戶名函數
password: 登陸數據庫的密碼fetch
database: 使用數據庫名大數據
charset: 設置字符集spa
有了數據庫的連接對象以後, 就能夠對數據庫執行必定的操做了對象
使用代碼來連接數據庫通常都須要一箇中介, 來具體執行SQL語句, 通常是cursor(遊標)
建立遊標對象
cursor = conn.cursor()
在cursor()函數中能夠傳入參數來設置, 查詢的結果顯示的結構, 默認爲null, 顯示的結構爲:
整個是一個元組, 查詢獲得的一個記錄也是一個元組對象
通常地, 傳入參數
cursor = conn.cursor(pymysql.cursors.DictCursor)
獲得的顯示結果爲:
整個是一個列表, 一個記錄是一個字典, 鍵是列名
建立好遊標對象以後, 就可使用遊標對象來執行一些SQL語句
首先是生成SQL語句, 通常地, 爲了數據庫安全, 通常不要本身拼接SQL語句
正確的拼接SQL的方式是將傳入的參數放到遊標執行SQL語句的函數中
sql = "select * from userinfo where username=%s and password=%s"
cursor.execute(sql,user,pwd)
注意:
在原有SQL語句中使用%s作佔位符
使用execute()函數來執行SQL語句
能夠將傳入的參數封裝成列表, 元組, 字典(此時須要在佔位符上加上標記如: %(user)s 來做爲鍵)
若是須要執行多行SQL語句可使用executemany()
sql = "insert into userinfo(username,password) values(%s,%s)"
cursor.executemany(sql, [('egon', '12'), ('wusir', '123')])
執行SQL語句以後能夠有返回值, 這個返回值是一個整數值, 表示受影響的函數, 若是是查詢語句, 獲得的就是結果的行數
執行修改數據庫的操做, 須要提交事務來生效
conn.commit()
能夠經過fetchone(), fetchmany(), fecchall()來獲得執行的結果
result = cursor.fetchone()
其中, fetchone獲得的是一條數據, fetchmany能夠傳入一個數值, 表示取的多少行, fechall表示取得查詢全部結果
通常的, 不使用fetchmany, 要想使用少數部分的值, 應該在SQL中作必定的查詢限制(limit), 這樣可以保證內存不被查詢獲得的大數據撐爆
在取數據的時候, 相似文件的光標性質, 獲得一行光標移動到下一行, 若是先執行fetchall, 那個在fertch獲得的結果就是空了
能夠設置光標的移動
cursor.scroll(1,mode='relative') # 相對當前位置移動
cursor.scroll(2,mode='absolute') # 相對絕對位置移動
有的時候, 咱們插入數據的時候是不設置該數據的ID的, 可是咱們還須要得到對該ID當作數據插入到另外一個表的時候
若有文章表和文章媒體表
這是就須要或的最後插入的數據的時候的ID
cursor.execute(sql)
print(cursor.lastrowid)
先關閉遊標, 在關閉連接
cursor.close()
conn.close()