【问题标题】:How send Datetime as parameter in SQL command on Python?如何在 Python 上的 SQL 命令中将日期时间作为参数发送?
【发布时间】:2016-10-04 21:39:33
【问题描述】:

我有一个 sql 命令,只想在某些条件下选择一些记录(使用 python & db 是 Postres): 所以,我的查询是:

 current_date= datetime.now()

  tt = yield self.db.execute(self.db.execute('SELECT "Id", "RubricId", "IsRubric"  
     FROM whis2011."CoockieUserInterests"
     'WHERE "UserId" = %s AND "Date" = %s '
     % (Id, current_date))

result=tt.fetchall()[0]

问题:当我想将日期时间传递给“日期”字段时出现错误:

syntax error at or near "00"
LINE 1: ...rests" WHERE "UserId" = 1 AND "Date" = 2016-10-05 00:22:07.3...
                                                         ^

数据库中的所有“日期”字段都类似于:2016-09-25 00:00:00

另外,数据库中“日期”字段的数据类型是“没有时区的时间戳”。

这是我的游泳池:

    application.db = momoko.Pool(
    dsn='dbname=xxxx user=xxxxx password=xxxxx host=xxxx port=5432',
    size=1,
    ioloop=ioloop,
)

如何在我的数据库中选择具有这种格式的“日期”?

【问题讨论】:

标签: python postgresql datetime


【解决方案1】:

您没有说明您使用什么模块连接到 postgresql。让我们暂时假设它是psycopg2

在这种情况下,您可以使用以下方法将参数传递给查询:

current_date = datetime.now()

self.db.execute(
    'SELECT Id, RubricId, IsRubric '
    'FROM whis2011.CoockieUserInterests '
    'WHERE UserId = %s AND Date = %s',
     (Id, current_date))

请注意,我们在此处对 sql 字符串使用 % 插值运算符。相反,我们使用%s标记sql参数,然后将它们分别传递给cursor.execute

如果您使用不同的包连接到 Postgres,那么它可能会以不同的方式标记参数。查看文档或模块paramstyle 了解详细信息。

【讨论】:

  • 我正在使用“momoko”,我没有光标!
  • 即使粗略阅读文档也会告诉您momokopsycopg2 的包装器,并且connection.execute 方法接受参数就像cursor.execute 一样?
  • 我改变了,但仍然出错,我用我的连接池更新了代码,也许看看我的代码发生了什么很有用!
  • 你得到同样的错误?您最初的错误是因为您没有用引号引起来。但是这个参数化的答案不需要引号。请指教。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多