• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回python栏目

102 - 第三方库 - 操作MySQL存储 - PyMySQL - 理解

作者:

贺及楼

成为作者

更新日期:2024-10-28 10:14:34

PyMySQL

pymysql 库的简介

Python 的 PyMySQL 库是一个 MySQL 数据库客户端库,它遵循 MySQL 的原生协议,提供了连接、操作MySQL数据库的功能。使用 PyMySQL,开发者可以在Python程序中方便地执行SQL语句,进行数据的增删改查。它支持多线程操作,提供了丰富的接口来处理数据库事务,适用于Web开发、数据迁移、自动化脚本等多种场景,是Python与MySQL数据库交互的重要工具。

安装连接数据库 pymysql库命令

  1. pip install pymysql

简单理解,不可以用的!

  1. db = pymysql.connect(host="localhost",user="root", password="123456", port=3306)
  2. cursor = db.cursor() # 获得指针
  3. cursor.execute("SQL语句") # 执行
  4. db.commit() # 提交
  5. cursor.close() # 关闭光标对象
  6. db.close() # 关闭数据库连接

字典形式,防止突然增加字段 完整代码,不可以用,会sql注入

  1. db = pymysql.connect(host="localhost",user="root", password="123456", port=3306)
  2. cursor = db.cursor()
  3. data = {
  4. "id": "20151001",
  5. "name": "ken",
  6. "age": 24
  7. }
  8. table = "students"
  9. keys = ", ".join(data.keys())
  10. values = ", ".join(["%s"] * len(data))
  11. sql = "INSERT INTO {table}({keys}) VALUES ({values})".format(table=table, keys=keys, values=values)
  12. try:
  13. if cursor.execute(sql, tuple(data.values())):
  14. print("Successful")
  15. db.commit()
  16. except:
  17. print("Failed")
  18. db.rollback()
  19. cursor.close()
  20. db.close()

连接数据库
获得指针
数据
数据表
获得所有键
获得所有值
组合SQL语句
尝试
execute运行
提交
如果失败
回滚
关闭指针
关闭数据库

sql注入就是只要自己拼完全部sql的话就不行

可以用,避免sql注入

更好的是自己写一个验证类

  1. import pymysql
  2. conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="db_name")
  3. cursor = conn.cursor()
  4. id = 1
  5. name = "名字"
  6. sql = "select id, name from db_table where id=%s and name=%s"
  7. try:
  8. row_count=cursor.execute(sql ,(id,name))
  9. rs=cursor.fetchall()
  10. for r in rs:
  11. print (r)
  12. except Exception as e:
  13. print(e)
  14. print("no")
  15. db.rollback()
  16. cursor.close()
  17. db.close()

table表名不能这样用

  1. sql = "select id, name from %s where id=%s and name=%s"
  2. try:
  3. row_count=cursor.execute(sql, (db_table, id, name))

这是pymysql的原因
暂时的解决方法
查一下自己的数据库有什么表
然后对比一下