• Python3使用PyMySQL连接MySQL


    本文内容皆为作者原创,码字不易,如需转载,请注明出处: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="""】,添加了空格后调试仍报错。后来不知道改了哪里,莫名又成功了。到现在我也不太明白是哪里出错了,这个问题先登记,以后遇到再解决。

  • 相关阅读:
    老话题之C#写邮件发送
    MVC readioButtonList的创作过程及运用
    asp.net发送短信
    关于MVC打印问题,打印指定的内容
    Java WebSocket HttpSession与WebSocket Session的关联
    JUnit accuracy/failure/stress test区别
    JUnit pass/failure/error区别
    Eclipse 重构
    Java 注释
    Java API概述
  • 原文地址:https://www.cnblogs.com/temari/p/13162124.html
Copyright © 2020-2023  润新知