Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python psycopg插入时间戳而不格式化它_Python_Postgresql_Psycopg2 - Fatal编程技术网

Python psycopg插入时间戳而不格式化它

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”绊倒了,抛出了一个

我有一个时间戳,我正试图使用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”绊倒了,抛出了一个语法错误

我已经尝试将字符串转换为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医生方面好运!祝你快乐:-)