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

 

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