在Python中使用MySQL函数

1 投票
2 回答
3882 浏览
提问于 2025-04-17 20:37

我想在Python中使用MySQL的日期时间函数str_to_date。我需要一些关于如何在Python中使用MySQL函数的指导。Raw_Data是我使用的表的名字。

sql = """INSERT INTO RawData(DateTime) VALUES ('%s')""" % (STR_TO_DATE(date_time,'%d/%b/%Y:%T'))     
cursor.execute(sql)

错误信息:

NameError: name 'STR_TO_DATE' is not defined

2 个回答

2

首先,最重要的一点是:绝对不要把字符串格式化后再传给SQL。

你可以在这里看到详细的解释 http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters(虽然这是针对PostgreSQL的,但这是数据库编程的基本原则)。

你需要做的是将MYSQL函数作为参数传递给查询。关于如何做到这一点,你可以在这篇文章中了解更多:

Python MySQL 参数化查询,还有这里:http://mysql-python.sourceforge.net/MySQLdb.html#cursor-objects

这样,当你绑定一个日期时,就不需要把它转换成字符串再转换回来。

所以这段代码是可以的:

import datetime
d = datetime.datetime.now()
sql = """ INSERT INTO RawData(DateTime) Values ('%s')"""
cursor.execute(sql, (d,))

如果你确实想在代码中使用一个函数,这个函数必须是SQL的一部分,而不是一个参数(或者作为字符串参数传递,这样是不好的)。这个伪代码应该是这样的(我还没有运行过):

sql = """INSERT INTO RawData(DateTime) VALUES (STR_TO_DATE('%s',%%d/%%b/%%Y:%%T'))"""
cursor.execute(sql, (d,))
1

把你的查询改成这样:
更新:

sql = """INSERT INTO RawData(DateTime) VALUES (STR_TO_DATE(%s, '%%d/%%b/%%Y:%%T'))"""% (date_time)

撰写回答