我在MySQL表中有一个日期列。我想在此列中插入一个datetime.datetime()
对象。我应该在执行语句中使用什么?
我试过:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
我收到一个错误:"TypeError: not all arguments converted during string formatting"
我应该用什么来代替%s
?
9条答案
按热度按时间ki0zmccv1#
对于时间字段,请用途:
我认为
strftime
也适用于datetime
。2ledvvac2#
您很可能会得到TypeError,因为您需要用引号将datecolumn值括起来。
请尝试:
关于格式,我成功地使用了上述命令(包括毫秒)和以下命令:
希望这对你有帮助。
0pizxfdo3#
请尝试使用
now.date()
来取得Date
对象,而不是DateTime
。如果这样做不起作用,那么将其转换为字符串应该可以:
e4yzc0pl4#
使用Python方法
datetime.strftime(format)
,其中格式='%Y-%m-%d %H:%M:%S'
。时区数
如果需要考虑时区,可以将MySQL时区设置为UTC,如下所示:
时区可以在Python中设置:
MySQL Documentation(第一个字母)
MySQL可识别以下格式的DATETIME和TIMESTAMP值:
以**'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'**格式的字串。此处也允许使用“宽松”语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,“2012-12-31 11:30:45”、“2012^12^31 11+30+ 45”、“2012/12/31 1130 45”和“2012@12@31 11^30^45”是等效的。
在日期和时间部分与小数秒部分之间唯一可识别的分隔符是小数点。
日期和时间部分可以用T分隔,而不是用空格分隔。例如,'2012-12-31 11:30:45'和'2012-12- 31 T11:30:45'是等效的。
作为“YYYYMMDDHHMMSS”或“YYMMDDHHMMSS”格式的不带分隔符的字符串,前提是该字符串作为日期是有意义的。例如,“20070523091528”和“070523091528”被解释为“2007-05-23 09:15:28”,但“071122129015”是非法的(它具有无意义的分钟部分),将变为“0000-00 - 00 00:00:00”。
以YYYYMMDDHHMMSS或YYMMDDHHMMSS格式表示的数字,前提是该数字作为日期是有意义的。例如,19830905132800和830905132800将解释为“1983-09-05 13:28:00”。
p1iqtdky5#
您正在连接到什么数据库?我知道Oracle对日期格式可能很挑剔,喜欢ISO 8601。
**注意:哎呀,我刚刚读到你是在MySQL上。只需格式化日期,并尝试将其作为单独的直接SQL调用进行测试。
在Python中,可以获得ISO日期,如
例如,Oracle喜欢这样的日期
根据您的数据库,如果是Oracle数据库,您可能需要对它执行TO_DATE:
TO_DATE的一般用法为:
如果使用另一个数据库(我看到光标并认为是Oracle;我可能是错的),然后检查他们的日期格式工具。对于MySQL,它是DATE_FORMAT(),SQL Server是CONVERT。
使用SQLAlchemy这样的工具也可以消除这些差异,让你的生活变得轻松。
yptwkmov6#
如果你使用的是python datetime.date(不是完整的datetime.datetime),只需将日期转换为字符串即可。这非常简单,对我也适用(mysql,python 2.7,Ubuntu)。列
published_date
是MySQL的日期字段,python变量publish_date
是datetime.date
。jv2fixgn7#
上述代码将失败,因为“datetime.now()”会生成“datetime.datetime(2014,2,11,1,16)”作为参数值以插入语句。
使用以下方法捕获提供字符串值的日期时间。
我能够成功地运行更改后的代码...
y1aodyip8#
例如,日期为5/5/22,请将其转换为mysql日期格式2022-05-05,以便在mysql数据库中插入记录%m月%d日%Y年(4位数)%y 2位数
代码如下:
输出量:
2022年5月5日前
2022年5月5日之后
(mysql格式,你可以很容易地插入到数据库中)x1c 0d1x
fjnneemd9#
插入到t-sql时
这失败了:
这是可行的:
从容道: