Python操作MySQL及常見問題處理

Python操作MySQL及常見問題處理

Python操作MySQL的前提已安裝MySQL數據庫管理系統軟件。還需要安裝連接MySQL的模塊(包)如pymysql。

關於MySQ數據庫管理系統的安裝,可以參見:

https://blog.csdn.net/cnds123/article/details/104454487

MySQL是Web世界中使用最廣泛的數據庫服務器。是爲服務器端設計的數據庫。

連接MySQL一般使用pymysql包。

安裝pymysql包可在cmd窗口中使用pip install pymysql命令。

【Python第三方模塊(庫、包)安裝、卸載與查看

https://mp.csdn.net/console/editor/html/104393385

 

 

Python使用PyMySQL模塊操作MySQL的步驟順序:

建立連接

獲取遊標

執行SQL語句

關閉(遊標、連接)

參見下圖:

 

Connection對象

  • 用於建立與數據庫的連接
  • 創建對象:調用connect()方法

conn=connect(參數列表)

   參數之間用英文逗號分隔

  • 參數host:連接的mysql主機,如果本機是'localhost'
  • 參數port:連接的mysql主機的端口,默認是3306
  • 參數database:數據庫的名稱
  • 參數user:連接的用戶名
  • 參數password:連接的密碼
  • 參數charset:通信採用的編碼方式,推薦使用utf8,對於mysql新版本使用utf8mb4。

Connection對象常用方法

  • close()關閉連接
  • commit()提交
  • rollback()事務,放棄之前的操作
  • cursor()返回Cursor對象,用於執行sql語句並獲得結果

 

Cursor對象

  • 用於執行sql語句,使用頻度最高的語句爲select、insert、update、delete
  • 創建(獲取)Cursor對象:調用Connection對象的cursor()方法

如cursorA =conn.cursor()

Cursor對象常用方法

  • close()關閉
  • execute(operation [, parameters ])執行語句,返回受影響的行數,主要用於執行insert、update、delete語句,也可以執行create、alter、drop等語句
  • fetchone()執行查詢語句時,獲取查詢結果集的第一個行數據。
  • fetchall()執行查詢時,獲取結果集的所有行。
  • next()執行查詢語句時,獲取當前行的下一行
  • croll(value[,mode])將行指針移動到某個位置

     mode表示移動的方式,默認值爲relative,表示基於當前行移動到value,value爲正則向下移動,value爲負則向上移動;值爲absolute,表示基於第一條數據的位置,第一條數據的位置爲0

對象的屬性

  • rowcount只讀屬性,表示最近一次execute()執行後受影響的行數
  • connection獲得當前連接對象

 

例1、 python + pymysql 創建名爲test_db的數據庫

#引入pymysql模塊(包)

import pymysql

 

# 創建連接

conn = pymysql.connect(host='localhost', user='root', password='')

 

# 創建遊標

cursorA = conn.cursor()

 

# 創建數據庫的sql

sql = "CREATE DATABASE test_db"

 

try:

    # 執行創建數據庫的sql

    cursorA.execute(sql)

    print("數據庫創建成功")

except pymysql.Error as e:

    print(e)

 

#關閉遊標

cursorA.close()

 

#關閉數據庫連接

conn.close()

 

說明:Connect() 方法用於創建數據庫的連接,返回數據庫連接對象,其中需要指定參數:用戶名,密碼,主機等信息。存在中文的時候,連接需要添加charset='utf8',否則中文顯示亂碼。

保存文件名pymysqlTestDB.py,運行結果如下:

 

此時,將在MySQL安裝目錄的Data文件夾建立test_db數據庫(表現爲名爲test_db文件夾,此時該文件夾是空的)

 

例2、python + pymysql 連接名爲test_db的數據庫,在其中新建名爲user1的表

# 導入pymysql模塊

import pymysql

 

# 連接database

conn = pymysql.connect(host='localhost', user='root',password='', database='test_db')

# 得到一個可以執行SQL語句的光標對象

cursorA = conn.cursor()

# 定義要執行的SQL語句

sql = """

CREATE TABLE IF NOT EXISTS user1 (

    id INT auto_increment PRIMARY KEY ,

    name CHAR(10) NOT NULL UNIQUE,

    age TINYINT NOT NULL

    )ENGINE=innodb DEFAULT CHARSET=utf8mb4;

    """

try:   

    # 執行SQL語句

    cursorA.execute(sql)

    print("表創建成功");

except pymysql.Warning as e:

    print(e)

 

# 關閉光標對象

cursorA.close()

# 關閉數據庫連接

conn.close()

 

保存文件名pymysqlTABLE.py,運行結果如下:

注意

1、其中的CREATE TABLE IF NOT EXISTS user1 可改爲CREATE TABLE user1

IF NOT EXISTS表示“如果不存在”,你可以自行對比兩者。

2、其中的CHARSET=utf8mb4

對以前的MySQL版本使用charset='utf8',對於新版本的MySQL需要改爲 CHARSET=utf8mb4

若對新版本的MySQL使用 charset='utf8',則運行時會出現如下提示:

Warning (from warnings module):

  File "D:\Users\Wang\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\cursors.py", line 170

    result = self._query(query)

Warning: (3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.")

 

例3、python + pymysql 連接名爲test_db的數據庫,對其中名爲user1的表增加數據。

#批量增加

# 導入pymysql模塊

import pymysql

# 連接database

conn = pymysql.connect(host='localhost', user='root',password='', database='test_db',charset='utf8mb4')

# 得到一個可以執行SQL語句的光標對象

cursorA = conn.cursor()

sql = "INSERT INTO user1(name, age) VALUES (%s, %s);"

data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)]

try:

    # 批量執行多條插入SQL語句

    cursorA.executemany(sql, data)

    # 提交事務

    conn.commit()

except Exception as e:

    print(e)

    # 有異常,回滾事務

    conn.rollback()

cursorA.close()

conn.close()

其中,conn.commit(),提交事務,如果是向數據庫插入一條數據後,必須使用該命令,否則數據不會被真正的寫入。

保存文件名BatchAadd.py。

 

例4、python + pymysql 連接名爲test_db的數據庫,查詢名爲user1的表中的數據。

#查詢

# 導入pymysql模塊

import pymysql

# 連接database

conn = pymysql.connect(host='localhost', user='root',password='', database='test_db',charset='utf8mb4')

# 得到一個可以執行SQL語句的光標對象

cursorA = conn.cursor()

# 查詢數據的SQL語句

sql = "SELECT id,name,age FROM user1;"

# 執行SQL語句

cursorA.execute(sql)

# 獲取多條查詢數據

ret = cursorA.fetchall()

cursorA.close()

conn.close()

# 打印下查詢結果

print(ret)

保存文件名QueryData.py。運行結果如下:

 

查詢條件帶變量的例子

這種方法更具有靈活性,在某些場所更具有實用價值。

例5、python + pymysql 連接名爲test_db的數據庫,使用條件帶變量查詢名爲user1的表中的數據

#查詢條件帶變量

# 導入pymysql模塊

import pymysql

# 連接database

conn = pymysql.connect(host='localhost', user='root',password='', database='test_db',charset='utf8mb4')

# 得到一個可以執行SQL語句的光標對象

cursorA = conn.cursor()

# 查詢數據的SQL語句,查詢條件使用變量

nameA="Alex"

ageA =18

sql = "SELECT id,name,age FROM user1 WHERE name='%s'AND age = '%s'"%(nameA,ageA)

#sql = "SELECT id,name,age FROM user1 WHERE name='Alex'"

# 執行SQL語句

cursorA.execute(sql)

#cursorA.execute("SELECT id,name,age FROM user1 WHERE name='%s'"%(nameA))

# 獲取多條查詢數據

ret = cursorA.fetchall()

cursorA.close()

conn.close()

# 打印下查詢結果

print(ret)

保存文件名QueryWithVariable.py。運行結果如下:

 

關於pymysql模塊

https://www.cnblogs.com/Felix-DoubleKing/p/10090668.html

 

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