我不会称自己是新手,但我对编程并不十分熟悉。任何帮助,将不胜感激。我有这个项目差不多完成了。想出了很多东西,但这个问题让我感到茫然。
是否有一种简单的方法可以在postgresql查询中插入可接受的日期值:
start_date = raw_input('Start date: ')
end_date = raw_input('End date: ')
我希望上面的变量能够在下面工作。
WHERE (gltx.post_date > start_date AND gltx.post_date < end_date )
'YYYY-MM-DD'格式通过python triple quoted cursor.execute在postgresql数据库的SELECT Query中工作。
postgresql列(post.date)是日期格式。
这是python脚本的标题。
#!/usr/bin/python
import psycopg2 as dbapi2
import psycopg2.extras
import sys
import csv
现在我一直在改变不同时期的查询。
还有一种简单的方法可以将返回的日期格式化为YYYYMMDD。也许是一个用虚线替换破折号或连字符的过滤器。我也可以将它用于电话号码。
答案 0 :(得分:0)
使用cursor.execute
方法的参数替换
import psycopg2
query = """
select to_char(gltx.post_date, 'YYYYMMDD') as post_date
from gltx
where gltx.post_date > %s AND gltx.post_date < %s
;"""
start_date = '2014-02-17'
end_date = '2014-03-04'
conn = psycopg2.connect("dbname=cpn")
cur = conn.cursor()
cur.execute(query, (start_date, end_date))
rs = cur.fetchall()
conn.close()
print rs
答案 1 :(得分:0)
如果要在Python脚本中执行此SELECT,则不应将字符串直接放入数据库查询中 - 否则会冒SQL注入的风险。请参阅psycopg2文档 - the problem with query parameters。
相反,您需要使用占位符并将所有字符串参数放入一个可迭代的(通常是一个元组),它作为第二个参数传递给cursor.execute()。再次查看文档 - passing parameters to sql queries。
因此,您将创建一个游标对象,并调用execute()方法,将查询字符串作为第一个参数传递,并将包含两个日期的元组作为第二个参数传递。例如
query = "SELECT to_char(gltx.post_date, 'YYYYMMDD') FROM gltx WHERE (gltx.post_date > %s AND gltx.post_date < %s)"
args = (start_date, end_date)
cursor.execute(query, args)
要在Python空间中格式化日期,可以在日期对象上使用strftime()方法。如果你想做的不仅仅是打印输出,你应该使用datetime对象而不是字符串。
您也可能想验证输入raw_input()的日期是否也是有效日期。