1

Flask-Peeweeでこのカスタム クエリをフェッチしたい

SELECT A.* , haversine('34.0160',' -118.4925', A.lat, A.long, 'MILES') AS dist FROM merchant_details A HAVING haversine('34.0160', '-118.4925', A.lat, A.long, 'MILES') <6000

次のコード コードを試してみましたが、うまくいきませんでした。「長い」オブジェクトに属性「fetchall」がありません。

@app.route('/api/results/')
def results():
    db = connect_db()
    cur = db.execute("SELECT A.* , haversine('34.0160',' -118.4925', A.lat, A.long, 'MILES') AS dist FROM merchant_details A HAVING haversine('34.0160', '-118.4925', A.lat, A.long, 'MILES') <6000 LIMIT 1")
    entries = [dict(id=row[0], merchant_id=row[1], merchant_name=row[2], first_name=row[3]) for row in cur.fetchall()]
    return repr(entries)

どんな助けでも大歓迎です。

編集>

connect_db 関数は次のとおりです。

from torndb import Connection

LOCALHOST = "localhost"
DBNAME = "XXXX"
DBUSER = "XXXX"
DBPASSWORD = "XXXX"


    #connect with DB
    def connect_db():
        db = Connection(LOCALHOST,DBNAME, user=DBUSER, password=DBPASSWORD)
        return  db

    #close the connection from DB
    def close_db(db):
        db.close()
4

2 に答える 2

1

私の推測では、実際にはデータベース接続ではなくカーソルconnect_db()を返します。そのため、実際には からの戻り値はlong (クエリから返される行数) になります。最初のステップとして試す必要があるのは、次のように変更することです。db.execute

curr = connect_db()
curr.execute("QUERY")
entries = [... for row in curr.fetchall()]

connect_dbまた、接続オブジェクトとカーソル オブジェクトの機能をラップする新しいオブジェクトを返す可能性も非常に高いです (ソースは見ていません) 。私は過去にこれを自分でやったことがあります。唯一の奇妙な点はclose、カーソルと接続の両方が定義されるため、メソッドの処理ですclose。私の場合、close両方を閉じました。

あなたのコメントに基づいて編集
繰り返しますが、ソースコードを読まないと、connect_db()本当に推測することしかできません。ただし、次のことを試してみてください。

conn = connect_db()
curr = conn.cursor()

で、前と同じように進みます。print dir(conn) after the call toそれでもエラーが発生する場合は、そのリストにconnect_db() . My guess now is that it will show acursor` 関数を追加して、そのプロパティとメソッドを調べてください。

于 2013-12-19T14:31:19.400 に答える