只要不尝试发布到数据库,我就可以调用该属性。但是,当我尝试发布到数据库时,出现以下错误:
'psycopg2.extensions.connection'对象没有属性'execute'
下面是将显示cgi字段存储中的属性的行以及提示错误的行。我想念什么?
我已验证与数据库的连接在其他页面上是否可用。
# works
print "{0}".format(fname)
# doesn't work
cur.execute("select * from seats where seat like '%{0}%'".format(fname))
我创建了一个名为funct.py的页面,其中包含db连接器函数。
def dbconnector(): db = psycopg2.connect("dbname=.. user=.. password=.. host=..")
cur = db.cursor()
有问题的页面将导入funct.py页面并调用该函数。 从funct import * ------ cur,db = dbconnector()
答案 0 :(得分:0)
看起来您可能正在从连接对象调用execute,这对于psycopg2是不正确的。您需要从游标对象中调用它,如下所示:
import psycopg2
conn = psycopg2.connect(host='', ...) # your connection properties
with conn.cursor() as cur: # Create a cursor and execute from that
cur.execute(
"SELECT * FROM seats WHERE seat ~ %s", # Query with your parameter
(fname,) # Tuple of your parameter values
)
conn.close()
我使用波浪号~
代替LIKE
-它会做同样的事情,但是不需要您将字符串用百分号%
包裹。 / p>
最后,您不应在查询中使用format
作为参数。对于SQL注入漏洞和转义引号而言,这都是不好的做法。取而代之的是使用execute
函数中的parameters参数,就像我上面所做的那样。