python 3.5 从 postgres 数据库中选择和使用结果
python 3.5 selecting and using results from postgres database
我需要编写一个程序,首先可以获取在 google 上看到我的竞选活动的人的 ip 地址,然后向我提供有关这些人每个人的详细信息。
我在 postgres 数据库中拥有所有信息并使用 python 3.5
这是我的代码:
def get_connection(cursor_factory=None):
conn_string_pg = "host= '" + host + "' dbname = '" + dbname + "' user = '" + user + \
"' password = '" + password + "'"
if cursor_factory is None:
conn_pg = psycopg2.connect(conn_string_pg)
else:
conn_pg = psycopg2.connect(conn_string_pg,
cursor_factory=cursor_factory)
return conn_pg
def find_logs():
select = """ select ip_address from log_files o where o.url like
'%my_campaign'
"""
conn = get_connection(cursor_factory = RealDictCursor)
cur = conn.cursor()
cur.execute(select)
records = cur.fetchone()
for item in records:
select_2 = "select * from log_files where ip_address = %(item)s "
cur.execute(select_2)
logs = cur.fetchone()
return logs
print(find_logs())
cur.close()
不幸的是我得到了这个错误:
psycopg2.ProgrammingError: syntax error at or near "%" LINE 1:
...elect * from web_logs.log_data where ip_address = %(item)s o...
这是因为 ip_address = %(item)s
它不是有效的 sql 语法。您应该在之前进行字符串格式化:
select_2 = "select * from log_files where ip_address = %(item)s " % {'item': item}
更好的方法是将所有转换交给 postgres 驱动程序
select_2 = "select * from log_files where ip_address = %s "
cur.execute(select_2, (item, ))
您的字符串插值不正确。您试图将 item 的值插入到 select_2
语句中,但实际上并没有进行字符串插值,因此您向 psycopg2 传递了一个无效的 SQL 语句。你想做类似
的事情
select_2 = "select * from log_files where ip_address = {}".format(item)
我需要编写一个程序,首先可以获取在 google 上看到我的竞选活动的人的 ip 地址,然后向我提供有关这些人每个人的详细信息。
我在 postgres 数据库中拥有所有信息并使用 python 3.5
这是我的代码:
def get_connection(cursor_factory=None):
conn_string_pg = "host= '" + host + "' dbname = '" + dbname + "' user = '" + user + \
"' password = '" + password + "'"
if cursor_factory is None:
conn_pg = psycopg2.connect(conn_string_pg)
else:
conn_pg = psycopg2.connect(conn_string_pg,
cursor_factory=cursor_factory)
return conn_pg
def find_logs():
select = """ select ip_address from log_files o where o.url like
'%my_campaign'
"""
conn = get_connection(cursor_factory = RealDictCursor)
cur = conn.cursor()
cur.execute(select)
records = cur.fetchone()
for item in records:
select_2 = "select * from log_files where ip_address = %(item)s "
cur.execute(select_2)
logs = cur.fetchone()
return logs
print(find_logs())
cur.close()
不幸的是我得到了这个错误:
psycopg2.ProgrammingError: syntax error at or near "%" LINE 1: ...elect * from web_logs.log_data where ip_address = %(item)s o...
这是因为 ip_address = %(item)s
它不是有效的 sql 语法。您应该在之前进行字符串格式化:
select_2 = "select * from log_files where ip_address = %(item)s " % {'item': item}
更好的方法是将所有转换交给 postgres 驱动程序
select_2 = "select * from log_files where ip_address = %s "
cur.execute(select_2, (item, ))
您的字符串插值不正确。您试图将 item 的值插入到 select_2
语句中,但实际上并没有进行字符串插值,因此您向 psycopg2 传递了一个无效的 SQL 语句。你想做类似
select_2 = "select * from log_files where ip_address = {}".format(item)