我有一个时间戳,我正在尝试使用 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 卡在该空间上。我尝试使用 PG to_timestamp(),但 PG 在相同的位置挂起。我最终会得到其中的一些,并且我试图避免将其分解成几个必须重新连接在一起的字符串。有人有什么想法吗?如果需要,我可以操纵原始时间戳字符串,但我无法弄清楚该字符串应该是什么样子才能让 PG 满意。
提前致谢
最佳答案
你不应该这样格式化你的字符串。正如 Ilja 在评论中提到的那样,您很容易受到 SQL 注入(inject)攻击。您应该将字典作为第二个参数传递给 .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 会为您处理转义。
关于python - psycopg 插入时间戳而不格式化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43265901/