前提介绍:

【功能实现】:

1.登录本地MySQL Server创建数据库和表,Python3使用PyMySQL连接本地MySQL服务器,实现对数据库的表进行简单Insert操作。

【软件配置】:

1.MySQL服务器:MySQL 8.0.20

2.Pymsql版本:Pymsql 0.9.3

3.Python版本:Python3

4.Navicat for MySQL版本:Navicat 11

5.PyCharm版本:PyCharm Community Edition 2020.1.2 x64

一,本地安装MySQL Server

Python3使用PyMySQL连接本地MySQL服务器,首先要确保本地已安装MySQL Server,没有安装的朋友可以参考上一篇博客,链接:

二,创建数据库和表

2.1 创建数据库

#创建数据库PythonDB,默认编码格式为utf8,数据库的校验规则大小写不敏感。

mysql> CREATE DATABASE IF NOT EXISTS PythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected, 2 warnings (0.02 sec)

2.2 选择数据库

mysql> use PythonDB

Database changed

2.3 创建表

选择数据库PythonDB,创建学生表,课程表和学生选课表,表结构如下:

Student表:

学号

姓名

性别

年龄

所在系

Sno

Sname

Ssex

Sage

Sdept

Course表:

课程号

课程名

先行课

学号

Cno

Cname

Cpno

Ccredit

SC表:

学号

课程号

成绩

Sno

Cno

Grade

创建表SQL语句:

#创建表Student

mysql> CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,

-> Sname CHAR(20) UNIQUE,

-> Ssex CHAR(2),

-> Sage SMALLINT,

-> Sdept CHAR(20)

-> );

Query OK, 0 rows affected (0.05 sec)

#创建表Course

mysql> CREATE TABLE Course

-> ( Cno CHAR(4) PRIMARY KEY,

-> Cname CHAR(40),

-> Cpno CHAR(4),

-> Ccredit SMALLINT,

-> FOREIGN KEY(Cpno) REFERENCES Course(Cno)

-> );

Query OK, 0 rows affected (0.04 sec)

#创建表SC

mysql> CREATE Table SC

-> ( Sno CHAR(9),

-> Cno CHAR(4),

-> Grade SMALLINT,

-> PRIMARY KEY (Sno,Cno),

-> FOREIGN KEY (Sno) REFERENCES Student(Sno),

-> FOREIGN KEY (Cno) REFERENCES Course(Cno)

-> );

Query OK, 0 rows affected (0.04 sec)

#备注:->为换行符标识。

以管理员身份运行cmd窗口,cd到bin目录,执行以上sql语句,数据库和表创建完毕。

2.4 查看表结构

数据库和表创建成功后,打开软件Navicat for MySQL登录数据库,查看已创建的数据库和表结构,如图:


三,安装Pymysql

Python3使用Pymysql连接MySQL数据库,PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb。使用pip命令安装Pymysql。以管理员身份运行cmd窗口,cd命令进入pip安装目录,输入命令pip install pymysql。如图:


看到“Successfully installed pymysql...”,表示已经安装成功。

四,编写Python程序操作表结构

打开PyCharm,创建项目,新建python文件,编写程序,进行数据库操作,以向数据库中插入数据为例。

4.1 Python程序

import pymysql

# 打开数据库连接

db = pymysql.connect(host='127.0.0.1', port=3306,user='root',password='123456',database='PythonDB',charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

#学生表新增一条记录

SqlStudentInsert = """

INSERT INTO Student(Sno,Sname, Ssex, Sage, Sdept) VALUES ('200215121', '李勇','男', 20, 'CS')

"""

#课程表新增一条记录

SqlCourseInsert = """

INSERT INTO Course (Cno, Cname, Cpno, Ccredit) VALUES ('2', '数学', NULL, 2)

"""

#学生选课表新增一条记录

SqlSCInsert = """

INSERT INTO SC(Sno,Cno, Grade)VALUES ('200215121', '2', 92)

"""

# 使用 execute() 方法执行 SQL

try:

# 执行sql语句

cursor.execute(SqlStudentInsert)

cursor.execute(SqlCourseInsert)

cursor.execute(SqlSCInsert)

# 提交到数据库执行

db.commit()

#cursor.close()

except Exception as e:

raise e

# 如果发生错误则回滚

db.rollback()

cursor.close()

# 关闭数据库连接

db.close()

4.2 执行结果

程序运行结果如下:


4.3 查看表结构

使用软件Navicat for MySQL登录数据库,查询表,查看新增数据已更新,如图:

Student表:


SC表:


Course表:


此处Python3程序只举例了Pymysql对MySQL数据库的简单的INSERT操作,主要了解Python3用Pymysql连接数据库的操作流程。Pymysql支持增删改查功能,后面有兴趣可以研究。

五.遇到的问题

1.程序在调试时报错:“pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '')' at line 1")”,如图:


问题分析:刚开始网上查询了些文章,分析是SQL语句字符串转义引起的,按照文章的解决办法调整了后,仍未解决。后来发现SQL语句等号两边未留空格,如截图中的【SqlStudentInsert="""】,添加了空格后调试仍报错。后来不知道改了哪里,莫名又成功了。到现在我也不太明白是哪里出错了,这个问题先登记,以后遇到再解决。