本文内容皆为作者原创,码字不易,如需转载,请注明出处:https://www.cnblogs.com/temari/p/13162124.html
前提介绍:
【功能实现】:
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,没有安装的朋友可以参考上一篇博客,链接:
https://www.cnblogs.com/temari/p/13156538.html
二,创建数据库和表
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="""】,添加了空格后调试仍报错。后来不知道改了哪里,莫名又成功了。到现在我也不太明白是哪里出错了,这个问题先登记,以后遇到再解决。