python3.6.4使用pymysql庫連線mysql
阿新 • • 發佈:2018-11-30
一開始看菜鳥教程講的是MySQLdb,後來發現這個庫只支援2.x不支援3.x,於是換了pymysql。
這裡用的資料庫是mysql5.7.20,資料管理工具使用的Navicat Premium。
1.首先安裝pymysql庫
pip install pymysql
注:因為已經安過了,所以這裡提示Requirement already satisfied。
因為要用mysql,所以首先啟動mysql
首先進入管理員下的命令提示符(win+x->a)
net start mysql
注:關閉mysql:
net stop mysql
在navicat上連線資料庫,並建立一個demo的資料庫以及一個叫db的表
2.測試增刪改查
host,port,user分別對應下圖。passwd=密碼,文中是123456;db=資料庫名字,文中是demo。
查詢
# 匯入 pymysql import pymysql # 開啟資料庫連線 db = pymysql.connect(host="localhost", user="root",passwd="123456", db="demo", port=3306) # 使用cursor()方法獲取操作遊標 cur = db.cursor() # 1.查詢操作 # 編寫sql 查詢語句,db是表名 sql = "select * from db" try: cur.execute(sql) # 執行sql語句 res = cur.fetchall() # 獲取查詢的所有記錄 print("id", "name", "passwd") # 遍歷結果 for row in res: id = row[0] name = row[1] passwd = row[2] print(id, name, passwd) except Exception as e: raise e finally: db.close() # 關閉連線
注:
fetchall() :返回多個元組,即返回多個記錄(rows),如果沒有結果 則返回 ()
fetchone() :返回單個的元組,也就是一條記錄(row),如果沒有結果 則返回 None
在MySQL中是NULL,而在Python中則是None
例如:
sql = "select id,username,passwd from db"
try:
cur.execute(sql)
res = cur.fetchone()
print("id", "name", "passwd")
print(res[0],res[1],res[2])
fetchone() 只取最上面的第一條結果
插入
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='demo')
cur=db.cursor()
sql_insert = """insert into db(id,username,passwd) values(4,'dada','233')"""
try:
cur.execute(sql_insert)
db.commit()
except Exception as e:
db.rollback()#錯誤回滾
finally:
db.close()
更新
import pymysql
db = pymysql.connect(host="localhost", user="root",passwd="123456", db="demo", port=3306)
cur = db.cursor()
sql_update = "update db set passwd = '%s' where id = %d" % ("555", 4)
try:
cur.execute(sql_update)
db.commit()
except Exception as e:
db.rollback()
finally:
db.close()
刪除
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='demo')
cur = db.cursor()
sql_delete = "delete from db where id = %d"%(4)
try:
cur.execute(sql_delete)
db.commit()
except Exception as e:
db.rollback()
finally:
db.close()