下午好,我研究了使用python中的postgresql的库,它写在说明中:
永远不要,永远不要使用Python字符串串联(+)或字符串参数插值(%)将变量传递给SQL查询字符串。甚至没有枪口。
我想从reports
表的第object, data
列中输出
我试图做一个这样的功能:
def select(self, column, table):
with conn.cursor() as cursor:
stmt = sql.SQL('SELECT {} FROM {}').format(
sql.Identifier(column),
sql.Identifier(table))
cursor.execute(stmt)
for row in cursor:
print(row)
但是我得到一个错误:
psycopg2.ProgrammingError: column "object, data" does not exist
LINE 1: SELECT "object, data" FROM "object"
我使用以下功能设法达到了预期的效果:
def select(self, column, table):
with conn.cursor() as cursor:
cursor.execute("SELECT %s FROM %s" %(column,table))
return cursor.fetchall()
能否请您告诉我如何在不使用%s
的情况下创建函数?
答案 0 :(得分:0)
代替传递字符串列,您应该具有要传递的列名称的列表。现在,您可以使用sql.SQL(', ').join()
来加入他们。
def select(self, columns, table):
with conn.cursor() as cursor:
stmt = sql.SQL('SELECT {} FROM {}').format(
sql.SQL(', ').join(sql.Identifier(n) for n in columns),
sql.Identifier(table))
cursor.execute(stmt)
for row in cursor:
print(row)