psycopg 插入时间戳而不格式化
psycopg insert timestamp without formatting it
我有一个时间戳,我正在尝试使用 psycopg 将其插入到 postgres 中,但我无法解决问题,我认为这是因为我正在尝试使用 python 的字符串格式将日期放到正确的位置。我有这样的东西
values = {"timestamp": u'2016-03-01T12:40:45.236697', ...}
"INSERT...VALUES(...{timestamp}...)".format(**values)
Postgres 在 "T" 上出错,抛出一个语法错误。
我试过将字符串转换为日期时间对象,但格式化只是将其放回如下所示的字符串中
2016-03-01 12:40:45.236697
并且 postgres 在 space 上挂断了。我试过使用 PG to_timestamp(),但 PG 在相同的地方挂断了。我最终会得到其中的一些,并且我试图避免将其分解成几个我必须重新组合在一起的字符串。有人有什么想法吗?如果需要,我可以操纵原始时间戳字符串,但我无法弄清楚该字符串应该是什么样子才能让 PG 满意。
提前致谢
你不应该那样格式化你的字符串。正如 Ilja 在评论中提到的那样,您很容易受到 SQL 注入攻击。您应该改为将字典作为第二个参数传递给 .execute()
,例如:
import datetime as dt
t = u'2016-03-01T12:40:45.236697'
cur.execute(
"""INSERT INTO your_table (timestamp, ...)
VALUES (%(timestamp)s, ...);""",
{'timestamp': dt.datetime.strptime(t,'%Y-%m-%dT%H:%M:%S.%f'), ...})
这确保插入了正确的数据类型并且 psycopg2 会为您处理转义。
我有一个时间戳,我正在尝试使用 psycopg 将其插入到 postgres 中,但我无法解决问题,我认为这是因为我正在尝试使用 python 的字符串格式将日期放到正确的位置。我有这样的东西
values = {"timestamp": u'2016-03-01T12:40:45.236697', ...}
"INSERT...VALUES(...{timestamp}...)".format(**values)
Postgres 在 "T" 上出错,抛出一个语法错误。
我试过将字符串转换为日期时间对象,但格式化只是将其放回如下所示的字符串中
2016-03-01 12:40:45.236697
并且 postgres 在 space 上挂断了。我试过使用 PG to_timestamp(),但 PG 在相同的地方挂断了。我最终会得到其中的一些,并且我试图避免将其分解成几个我必须重新组合在一起的字符串。有人有什么想法吗?如果需要,我可以操纵原始时间戳字符串,但我无法弄清楚该字符串应该是什么样子才能让 PG 满意。
提前致谢
你不应该那样格式化你的字符串。正如 Ilja 在评论中提到的那样,您很容易受到 SQL 注入攻击。您应该改为将字典作为第二个参数传递给 .execute()
,例如:
import datetime as dt
t = u'2016-03-01T12:40:45.236697'
cur.execute(
"""INSERT INTO your_table (timestamp, ...)
VALUES (%(timestamp)s, ...);""",
{'timestamp': dt.datetime.strptime(t,'%Y-%m-%dT%H:%M:%S.%f'), ...})
这确保插入了正确的数据类型并且 psycopg2 会为您处理转义。