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

标签 python postgresql 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 卡在该空间上。我尝试使用 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/

相关文章:

python - 为什么 fetchone()[0] 返回 'Nonetype'

json - 如何在 PostgreSQL 9.3 中查询 json 对象的日期字段?

sql - PostgreSQL中如何手动更新表的统计数据

python - psycopg2 和 SQL 注入(inject)安全

python - 使用 python 作为字典从 postgresql 查询

python - 尝试为 python (psycopg2) 安装 Postgres 时出错

python - 在 xubuntu 上使用 gnuplot 保存图表

python - 单击图例时如何更改 matplot 中一组点的颜色?

python - OpenCV imwrite()/imread() 这两个函数是否以任何方式修改图像?

postgresql - PL/pgSQL : How to use IF NEW. <variable_column_name> <> OLD.<variable_column_name>