强制转换字段类型

  • 对于数字类型的字段,最好不要加引号,以避免可能的类型转换问题。
  • 但在实际操作中,如果不小心加了引号,通常也不会有太大的问题。
  • 在Python中,可以使用pymysql的参数化查询功能来避免在SQL语句中加引号。
# 注意: 数据库中 id 这个字段类型为int
async with pool.acquire() as conn:
    async with conn.cursor() as cursor:
        sql = "SELECT COUNT(*) AS c FROM `table` WHERE `date`=%s AND `id`=%s"
    
    # 错误的写法
        data1 = ('2023-12-16', 1)
        await cursor.execute(sql, data1)

    # 正确的写法
        data2 = ('2023-12-16', int(1))
        await cursor.execute(sql, data2)

  • 如果1 没有加上int, 则实际查询语句为:
SELECT COUNT(*) AS c FROM `table` WHERE `date`='2023-12-16' AND `id`='1'
  • 如果1 没有加int, 则实际查询语句为:
SELECT COUNT(*) AS c FROM `table` WHERE `date`='2023-12-16' AND `id`=1

如何查询真实的查询语句

  • 在Python中,通常情况下,我们无法直接从数据库连接或游标对象中获取最后一次执行的SQL语句。
  • 这是因为SQL语句在执行后并不会被存储在这些对象中。
  • 但是可以通过MySQL的日志功能来查看执行过的SQL语句。
  • 需要先启用MySQL的日志记录功能,然后可以查询mysql.general_log表来查看执行过的SQL语句。
# 开启查询记录
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';

# 查看历史查询记录
SELECT * FROM mysql.general_log;


# 最后,不用的时候,还原初始设置
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log = 'OFF';

# 清空这个记录表
TRUNCATE mysql.general_log;
最后修改:2024 年 01 月 27 日
如果觉得我的文章对你有用,请随意赞赏