MySQL學習之連接python(七)

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窗口的輸出纔是完整的:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章