昨天在李哥幫忙檢驗我學習效果的時候
我使用pymysql出現瞭如下的錯誤 python
python-module 'pymysql' has no attribute 'connect'
一出錯 我本能的想去看下是否是我沒鏈接成功 而後 pip3 install pymysql
不要起import的包名做爲文件名啊!!!mysql
所以,我總結了下pymysql的基本使用sql
1、PyMySQL介紹
PyMySQL是在 Python3.x 版本中用於鏈接 MySQL 服務器的一個庫,Python2中是使用mysqldb。數據庫
PyMySQL安裝服務器
pip3 install pymysql
建立連接的基本使用 學習
# 導入pymysql模塊
import pymysql
# 鏈接database
conn = pymysql.connect(
host=「你的數據庫地址」,
user=「用戶名」,password=「密碼」,
database=「數據庫名」,
charset=「utf8」)
# 獲得一個能夠執行SQL語句的光標對象
cursor = conn.cursor() # 執行完畢返回的結果集默認以元組顯示
# 獲得一個能夠執行SQL語句而且將結果做爲字典返回的遊標
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定義要執行的SQL語句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能寫成utf-8
"""
# 執行SQL語句
cursor.execute(sql)
# 關閉光標對象
cursor.close()
# 關閉數據庫鏈接
conn.close()
在建連接以前,咱們須要作好一些前期工做:建庫建表fetch
下面例子中 我將使用我建好的庫:db= 'xing'spa
建好的userinfo表3d
簡單驗證功能對象
# pip3 install pymysql import pymysql user=input('user>>: ').strip() pwd=input('password>>: ').strip() # 創建連接 conn=pymysql.connect( host='192.168.0.103',#個人IP地址 port=3306, # 不是字符串不須要加引號。 user='root', password='123', db='xing', charset='utf8' ) # 拿到遊標 cursor=conn.cursor() # 執行sql語句 sql='select * from userinfo where user = "%s" and pwd="%s"' % (user, pwd) print(sql) res=cursor.execute(sql) print(res) cursor.close() conn.close() # 進行判斷 if res: print('登陸成功') else: print('登陸失敗')
輸出結果:
可是會有如下問題:輸入的SQL 語句被註釋了
或者是
這個時候以後 咱們能夠這樣解決
execute幫咱們作字符串拼接 # 將如下代碼 sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) res=cursor.execute(sql) # 改成 sql="select * from userinfo where name=%s and password=%s" #%s須要去掉引號,pymysql會自動加上 res=cursor.execute(sql,[user,pwd])
輸出結果:
2、增刪改查操做
添加多條數據
import pymysql conn = pymysql.connect( host='192.168.0.103', port=3306, user='root', password='123', database='xing', charset='utf8' ) # 獲取一個光標 cursor = conn.cursor() # 定義要執行的sql語句 sql = 'insert into userinfo(user,pwd) values(%s,%s);' data = [ ('july', '147'), ('june', '258'), ('marin', '369') ] # 拼接並執行sql語句 cursor.executemany(sql, data) # 涉及寫操做要注意提交 conn.commit() # 關閉鏈接 cursor.close() conn.close()
輸出結果:
插入單條數據
import pymysql conn =pymysql.connect( host ='192.168.0.103', port = 3306, user = 'root', password ='123', database ='xing', charset ='utf8' ) cursor =conn.cursor() #獲取一個光標 sql ='insert into userinfo (user,pwd) values (%s,%s);' name = 'wuli' pwd = '123456789' cursor.execute(sql, [name, pwd]) conn.commit() cursor.close() conn.close()
輸出結果:
獲取最新插入數據 (最後一條)
import pymysql # 創建鏈接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 獲取一個光標 cursor = conn.cursor() # 定義將要執行的SQL語句 sql = "insert into userinfo (user, pwd) values (%s, %s);" name = "wuli" pwd = "123456789" # 並執行SQL語句 cursor.execute(sql, [name, pwd]) # 涉及寫操做注意要提交 conn.commit() # 關閉鏈接 # 獲取最新的那一條數據的ID last_id = cursor.lastrowid print("最後一條數據的ID是:", last_id) cursor.close() conn.close()
輸出結果爲:(由於我以前插入多條記錄時,多運行了兩次,全部結果下面的這個)
刪除操做
import pymysql # 創建鏈接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 獲取一個光標 cursor = conn.cursor() # 定義將要執行的SQL語句 sql = "delete from userinfo where user=%s;" name = "june" # 拼接並執行SQL語句 cursor.execute(sql, [name]) # 涉及寫操做注意要提交 conn.commit() # 關閉鏈接 cursor.close() conn.close()
輸出結果是:
更改數據
import pymysql # 創建鏈接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 獲取一個光標 cursor = conn.cursor() # 定義將要執行的SQL語句 sql = "update userinfo set pwd=%s where user=%s;" # 拼接並執行SQL語句 cursor.execute(sql, ["july", "july"]) # 涉及寫操做注意要提交 conn.commit() # 關閉鏈接 cursor.close () conn.close ()
查詢數據
fetch數據
import pymysql conn = pymysql.connect ( host='192.168.0.103', port=3306, user='root', password='123', database='xing', charset='utf8' ) # 獲取一個光標 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 返回字典數據類型 # 定義將要執行的sql語句 sql = 'select user,pwd from userinfo;' # 拼接並執行sql語句 cursor.execute(sql) # 取到查詢結果 ret1 = cursor.fetchone() # 取一條 ret2 = cursor.fetchmany(3) # 取三條 ret3 = cursor.fetchone() # 取一條 cursor.close() conn.close() print(ret1) print(ret2) print(ret3)
# 能夠獲取指定數量的數據 cursor.fetchmany(3) # 光標按絕對位置移動1 cursor.scroll(1, mode="absolute") # 光標按照相對位置(當前位置)移動1 cursor.scroll(1, mode="relative")
數據回滾
import pymysql # 創建鏈接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 獲取一個光標 cursor = conn.cursor() # 定義將要執行的SQL語句 sql1 = "insert into userinfo (user, pwd) values (%s, %s);" sql2 = "insert into hobby (id, hobby) values (%s,%s);" user = "july1" pwd = "july1" id = "我是錯誤的id" #id = "3" hobby = "打遊戲" try: # 拼接並執行SQL語句 cursor.execute(sql1, [user, pwd]) print(sql1) cursor.execute(sql2, [id, hobby]) # 報錯的SQL語句 # 涉及寫操做注意要提交 conn.commit() except Exception as e: print(str(e)) # 有異常就回滾 conn.rollback() # 關閉鏈接 cursor.close() conn.close()