将日期插入Python MySQLdb

时间:2015-12-31 20:58:10

标签: python mysql database

我正在尝试使用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)

我的预感是问题必须对今天变量做一些事情,因为它是一个字符串,我必须使用引号来插入它。你有什么想法和建议?

提前致谢。

1 个答案:

答案 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,)强制它制作一个逗号   元组。