8

mysql-flaskpython拡張機能を使用していくつかのSQLを実行しようとしています。以下のコードは、何らかの理由で常にlongを返します。

stringify = lambda x : '"' + x + '"'
if request.method == 'POST':
        sql = "select * from users where username = " + stringify(request.form['username'])
        user = g.db.cursor().execute(sql).fetchall()

エラー:

 user = g.db.cursor().execute(sql).fetchall()
AttributeError: 'long' object has no attribute 'fetchall'

なぜこれは結果セットを返さないのですか?

また、挿入ステートメントを問題なく実行できます。

修正(回答):

def get_data(g, sql):
    cursor = g.db.cursor()
    cursor.execute(sql)
    data = [dict((cursor.description[idx][0], value) for idx, value in enumerate(row)) for row in cursor.fetchall()]
    return data
4

1 に答える 1

13

の結果に対してメソッドを呼び出そうとしていますがCursor.executeDB-API仕様では未定義とされています(使用している実装は整数を返しているようです)。代わりにfetchall、カーソルオブジェクトを呼び出します。何かのようなもの:

cursor = g.db.cursor()
cursor.execute(sql)
user = cursor.fetchall()
于 2012-11-16T06:06:28.607 に答える