我在MySQL表中有一个日期列.我想在datetime.datetime()此列中插入一个对象.我应该在执行语句中使用什么?
我试过了:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:"TypeError: not all arguments converted during string formatting"
我应该使用什么而不是%s?
g33*_*z0r 182
对于时间字段,请使用:
import time
time.strftime('%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
我认为strftime也适用于datetime.
小智 41
您最有可能获得TypeError,因为您需要围绕datecolumn值的引号.
尝试:
now = datetime.datetime(2009, 5, 5)
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, '%s')",
("name", 4, now))
Run Code Online (Sandbox Code Playgroud)
关于格式,我使用上面的命令(包括毫秒)成功,并且:
now.strftime('%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Wog*_*gan 13
尝试使用now.date()获取Date对象而不是DateTime.
如果这不起作用,那么将其转换为字符串应该有效:
now = datetime.datetime(2009,5,5)
str_now = now.date().isoformat()
cursor.execute('INSERT INTO table (name, id, datecolumn) VALUES (%s,%s,%s)', ('name',4,str_now))
Run Code Online (Sandbox Code Playgroud)
Chr*_*ert 10
使用 Python 方法datetime.strftime(format),其中 format = '%Y-%m-%d %H:%M:%S'。
import datetime
now = datetime.datetime.utcnow()
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, %s)",
("name", 4, now.strftime('%Y-%m-%d %H:%M:%S')))
Run Code Online (Sandbox Code Playgroud)
如果时区是一个问题,MySQL 时区可以设置为 UTC,如下所示:
cursor.execute("SET time_zone = '+00:00'")
Run Code Online (Sandbox Code Playgroud)
时区可以在 Python 中设置:
now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)
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 11*30*45”和“2012@12@31 11” ^30^45' 是等价的。
在日期和时间部分与小数秒部分之间识别的唯一分隔符是小数点。
日期和时间部分可以用 T 而不是空格分隔。例如, '2012-12-31 11:30:45' '2012-12-31T11:30:45' 是等价的。
作为一个没有分隔符的字符串,格式为“YYYYMMDDHHMMSS”或“YYMMDDHHMMSS”,前提是该字符串作为日期有意义。例如,'20070523091528'和'070523091528'被解释为'2007-05-23 09:15:28',但'071122129015'是非法的(它有一个无意义的分钟部分)并变成'000000 00:00'。
作为 YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 格式的数字,前提是该数字作为日期有意义。例如,19830905132800 和 830905132800 被解释为“1983-09-05 13:28:00”。