Python psycopg插入时间戳而不格式化它
我有一个时间戳,我正试图使用psycopg将它插入到postgres中,但我很难解决问题,我想这是因为我试图使用python的字符串格式将日期放入正确的位置。我有类似的东西Python psycopg插入时间戳而不格式化它,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我有一个时间戳,我正试图使用psycopg将它插入到postgres中,但我很难解决问题,我想这是因为我试图使用python的字符串格式将日期放入正确的位置。我有类似的东西 values = {"timestamp": u'2016-03-01T12:40:45.236697', ...} "INSERT...VALUES(...{timestamp}...)".format(**values) 2016-03-01 12:40:45.236697 Postgres被“T”绊倒了,抛出了一个
values = {"timestamp": u'2016-03-01T12:40:45.236697', ...}
"INSERT...VALUES(...{timestamp}...)".format(**values)
2016-03-01 12:40:45.236697
Postgres被“T”绊倒了,抛出了一个语法错误
我已经尝试将字符串转换为datetime对象,但是格式化只是将其重新转换为如下所示的字符串
values = {"timestamp": u'2016-03-01T12:40:45.236697', ...}
"INSERT...VALUES(...{timestamp}...)".format(**values)
2016-03-01 12:40:45.236697
而博士后则挂在了太空上。我曾尝试使用PGs 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将为您处理转义。您不应该这样格式化字符串。正如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将为您处理转义。谢谢,Bernie。这是一个内部api,我们控制所有进入的内容,所以我甚至没有考虑SQL注入,但我应该知道有更好的方法。我会更深入地研究psycopg2文档。@gignosko:不客气。祝你在psycopg2医生方面好运!很高兴为你编码:-)谢谢,伯尼。这是一个内部api,我们控制所有进入的内容,所以我甚至没有考虑SQL注入,但我应该知道有更好的方法。我会更深入地研究psycopg2文档。@gignosko:不客气。祝你在psycopg2医生方面好运!祝你快乐:-)