MySQL學習之連線python(七)
阿新 • • 發佈:2018-12-13
1、開啟服務
以管理員身份執行cmd,然後輸入:net start 服務名稱
如:net start mysql
或:net start mysql76 (具體看服務當初所起的名稱)
2、安裝PyMySQL
黑視窗處輸入:pip install PyMySQL
注意:若pip出現錯誤,原因可能是未將pip的路徑儲存為環境變數,pip的路徑為:
將其新增到環境變數,之後關閉dos視窗,再次開啟,繼續執行:pip install PyMySQL便可。
3、開啟python編譯器
輸入:
import pymysql # 連線資料庫 # 引數1:mysql服務所在主機的ip # 引數2:使用者名稱 # 引數3:密碼 # 引數4:要連線的資料庫名 db = pymysql.connect("localhost","root","","test") # 建立一個cursor物件 cursor = db.cursor() sql = "select version()" # 此行為要執行的sql語句 # 執行sql語句 cursor.execute(sql) # 獲取返回的資訊 data = cursor.fetchone() print(data) # 斷開 cursor.close() db.close()
執行結果為(注意需要在執行第一步之後才能正常執行,否則會報錯):
在dos視窗執行結果為:
4、使用ip連線資料庫
若用ip連線時出現報錯,則可先進行以下修改:
a、使用Navicat開啟資料庫,找到mysql名稱的資料庫--->user表--->將User為root其餘各項為Y的Host名稱改為%--->確認儲存。
b、關閉服務:net stop mysql
c、開啟服務:net starstart mysql
d、在python中便可使用ip連線服務。
5、建立資料庫表
import pymysql db = pymysql.connect("ip","root","","test") cursor = db.cursor() # 檢查表是否存在 cursor.execute("drop table if exists bandcard") # 檢查表bandcard是否存在,若存在則刪除。 # 建表 sql = "create table bandcard(id int auto_increment primary key, money int not null)" cursor.execute(sql) # 執行 cursor.close() db.close()
6、資料庫插入資料
import pymysql
db = pymysql.connect("ip","root","","test")
cursor = db.cursor()
sql = "insert into bandcard values(0,100)"
try: # 使用此格式的原因在於,插入的資料不一定插入成功
cursor.execute(sql)
db.commit() # 目的為將快取中的資料進行提交,(只要涉及到修改的均需要此語句,如:插入、刪除、修改;查詢時不需要修改,所以可以不用此句)
except:
# 如果提交失敗,回滾到上一次資料
db.rollback()
cursor.close()
db.close()
sql = "insert into bandcard values(0,300),(0,400),(0,500),(0,600),(0,700)" 插入多條資料
7、資料更新操作
sql = "update bandcard set money=10000 where id=1"
8、資料庫刪除操作
sql = "delete from bandcard where money=200"
9、資料庫查詢操作
'''
fetchone()
功能:獲取下一個查詢結果集,結果集是一個物件
fetchall() 常用
功能:接收全部的返回行
rowcount:是一個只讀屬性,返回execute()方法影響的行數,即查詢多少條資料。
'''
10、封裝(為了寫程式碼方便)
import pymysql
class M_mySql():
def __init__(self,host,user,passwd,dbName):
self.host = host
self.user = user
self.passwd = passwd
self.dbName = dbName
def connet(self):
self.db = pymysql.connect(self.host,self.user,self.passwd,self.dbName)
self.cursor = self.db.cursor()
def close(self):
self.cursor.close()
self.db.close()
def get_one(self,sql):
res = None
try:
self.connet()
self.cursor.execute(sql)
res = self.cursor.fetchone()
self.close()
except:
print("查詢失敗")
return res
def get_all(self,sql):
res =()
try:
self.connet()
self.cursor.execute(sql)
res = self.cursor.fetchall()
self.close()
except:
print("查詢失敗")
return res
def insert(self,sql):
return self.__edit(sql)
def update(self,sql):
return self.__edit(sql)
def delete(self,sql):
return self.__edit(sql)
def __edit(self,sql):
count = 0
try:
self.connet()
count = self.cursor.execute(sql)
self.db.commit()
self.close()
except:
print("事物提交失敗")
self.db.rollback()
return count
示例查詢:
from M_mysql import M_mySql
s = M_mySql("ip","root","","test")
res = s.get_all("select * from bandcard where money>400")
for row in res:
print("%d--%d"%(row[0],row[1]))
查詢->執行結果 :
示例插入:
from M_mysql import M_mySql
s = M_mySql("ip","root","","test")
res = s.insert("insert into bandcard values(0,909),(0,90909)")
print(res)
插入-> 執行結果:
所遇到的問題:
1、在python下執行(已在上文10中得到解決)
sql = "select * from students_1" # 此行為要執行的sql語句
僅輸出第一行資料:
而在dos視窗的輸出才是完整的: