• Python之PyMySQL操作详解


    一、PyMysql简介

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2.x中则使用mysqldb。

    Django中也可以使用PyMySQL连接MySQL数据库。

    二、PyMySQL操作详解

    2.1 PyMySQL安装

    pip install pymysql
    

    2.2 PyMySQL应用

    2.2.1 基本使用

    1. # coding=utf8
    2. import sys
    3. import pymysql
    4. import time
    5. # 连接database
    6. conn = pymysql.connect(host="数据服务器IP", user="用户名",password="密码",database="数据库名",charset="utf8")
    7. # 得到一个可以执行SQL语句的光标对象
    8. cursor = conn.cursor()
    9. # 定义要执行的SQL语句
    10. sql = """
    11. CREATE TABLE user (
    12. id INT auto_increment PRIMARY KEY ,
    13. name CHAR(10) NOT NULL UNIQUE,
    14. age TINYINT NOT NULL
    15. )ENGINE=innodb DEFAULT CHARSET=utf8;
    16. """
    17. # 执行SQL语句
    18. cursor.execute(sql)
    19. # 关闭光标对象
    20. cursor.close()
    21. # 关闭数据库连接
    22. conn.close()

    2.2.2 防止SQL注入

    1. # coding=utf8
    2. import sys
    3. import pymysql
    4. import time
    5. name = input("姓名:>>")
    6. age = input("年龄:>>")
    7. # 连接数据库
    8. conn = pymysql.connect(host="数据服务器IP", user="用户名",password="密码",database="数据库名",charset="utf8")
    9. # 获取光标,输入SQL语句并执行
    10. cursor = conn.cursor()
    11. # 自己拼接字符串,容易造成SQL注入问题
    12. sql1 = "select * from user where name='%s' and age='%s';"%(name,age)
    13. ret1 = cursor.execute(sql1)
    14. # 让pymysql来拼接,防止SQL注入
    15. sql2 = "select * from user where name=%s and age=%s;"
    16. ret2 = cursor.execute(sql2,[name,age])
    17. # 关闭光标和连接
    18. cursor.close()
    19. conn.close()
    20. print(ret2)

    2.2.3 用事务处理数据库操作

    1. # coding=utf8
    2. import sys
    3. import pymysql
    4. import time
    5. # 连接数据库
    6. conn = pymysql.connect(host="数据服务器IP", user="用户名",password="密码",database="数据库名",charset="utf8")
    7. # 获取光标,输入SQL语句并执行
    8. cursor = conn.cursor()
    9. # 写SQL语句(ignore 忽略已存在的数据,保证批量添加全部执行)
    10. sql = "INSERT IGNORE INTO user(name,age) VALUES(%s,%s);"
    11. name1 = "王芳"
    12. age1 = 29
    13. name2 = "刘广"
    14. age2 = 31
    15. try:
    16. # 单条添加
    17. #cursor.execute(sql, [name1, age1])
    18. # 多条添加
    19. cursor.executemany(sql, ((name1, age1),(name2, age2)))
    20. # 把修改提交到数据库
    21. conn.commit()
    22. except Exception as e:
    23. conn.rollback() # 执行SQL语句有问题或提交有异常都回滚
    24. cursor.close()
    25. conn.close()

    2.2.4 动态获取数据

    1. # coding=utf8
    2. import sys
    3. import pymysql
    4. import time
    5. # 连接数据库
    6. conn = pymysql.connect(host="数据服务器IP", user="用户名",password="密码",database="数据库名",charset="utf8")
    7. # 获取光标,输入SQL语句并执行
    8. cursor = conn.cursor()
    9. # 查询数据
    10. sql = """
    11. SELECT * FROM user LIMIT 2,10;
    12. """
    13. cursor.execute(sql)
    14. # 获取所有查询到的结果
    15. ret1 = cursor.fetchall()
    16. print(ret1)
    17. # 从查询语句中获取一条查询结果
    18. # ret2 = cursor.fetchone()
    19. # print(ret2)
    20. # 获取相应的行数
    21. # ret3 = cursor.fetchmany(2)
    22. # print(ret3)
    23. # 返回执行的sql语句
    24. # ret4 = cursor.mogrify(sql)
    25. # print(ret4)
    26. conn.commit()
    27. cursor.close()
    28. conn.close()

  • 相关阅读:
    【Android】使用Android Studio打包APK文件
    STM32G0开发笔记-Platformio+libopencm3-FreeRTOS和FreeModbus库使用
    dubbo学习笔记
    JavaWeb之js
    【C++】指针什么时候必须delete,什么时候可以不delete
    “程序员,致敬!”
    40. 组合总和 II
    如何跨虚拟专用网络连接到你的RTSA
    PCL——Filter
    剑指offer全集系列Java版本(2)
  • 原文地址:https://blog.csdn.net/m0_68949064/article/details/133983616