使用CGI字段存储发布到数据库时无法获取属性

时间:2019-05-07 15:47:33

标签: python postgresql cgi

只要不尝试发布到数据库,我就可以调用该属性。但是,当我尝试发布到数据库时,出现以下错误:

  

'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()

1 个答案:

答案 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参数,就像我上面所做的那样。