我正在尝试使用Python及其MySQLdb模块将当前日期插入MySQL。我可以成功地插入数据:
insert = "INSERT INTO table(utdate) VALUES('2015-12-31')"
但是,我不想硬编码日期,宁愿使用变量或函数,如:
today = time.strftime('%Y-%m-%d')
我已经尝试了以下所有查询但没有成功。成功进入数据库应显示为datetime.date(2016,01,01)。每个查询下面都是错误消息或生成的数据库条目。
insert = "INSERT INTO table(utdate) VALUES(today)"
_mysql_exceptions.OperationalError: (1054, "Unknown column 'today' in 'field list'")
insert = "INSERT INTO table(utdate) VALUES('today')"
(None)
insert = "INSERT INTO table(utdate) VALUES('%s')" % (today)
(None)
insert = "INSERT INTO table(utdate) VALUES(%s)" % (today)
(None)
我的预感是问题必须对今天变量做一些事情,因为它是一个字符串,我必须使用引号来插入它。你有什么想法和建议?
提前致谢。
答案 0 :(得分:0)
使用预准备语句,db api将为您处理类型映射。来自http://mysql-python.sourceforge.net/MySQLdb.html#some-examples
的文档import MySQLdb
db=MySQLdb.connect(passwd="moonpie",db="thangs")
要执行查询,首先需要一个游标,然后才能执行 查询:
c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""", (max_price,))
在此示例中,
max_price=5
为什么在字符串中使用%s
?因为 MySQLdb会将其转换为SQL文字值,即字符串 &#39; 5&#39 ;.完成后,查询实际上会说,&#34;...WHERE price < 5
&#34;。为什么是元组?因为DB API要求您传入任何内容 参数作为序列。由于解析器的设计,
(max_price)
被解释为使用代数分组,简单地称为max_price和 不是一个元组。添加一个逗号,即(max_price,)
强制它制作一个逗号 元组。