cari

Rumah  >  Soal Jawab  >  teks badan

Dapatkan hasil pertanyaan seperti dict dalam SQLAlchemy

Saya menggunakan Flask SQLAlchemy dan saya mempunyai kod berikut untuk mendapatkan pengguna daripada pangkalan data melalui pertanyaan SQL mentah daripada pangkalan data MySQL:

connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("SELECT * from User where id=0")
results = cursor.fetchall()

results Pembolehubah ialah tuple dan saya mahu ia jenis dict(). Adakah terdapat cara untuk mencapai ini?

Apabila saya menggunakan pymysql untuk membina sambungan pangkalan data, saya boleh melakukannya

cursor = connection.cursor(pymysql.cursors.DictCursor)

Adakah terdapat sesuatu yang serupa dalam SQLAlchemy?

Nota: Sebab saya ingin membuat perubahan ini adalah untuk menyingkirkan penggunaan pymysql dalam kod saya dan hanya menggunakan fungsi SQLAlcehmy, iaitu saya tidak mahu mempunyai "import pymysql" di mana-mana dalam kod saya.

P粉187160883P粉187160883407 hari yang lalu778

membalas semua(2)saya akan balas

  • P粉486743671

    P粉4867436712023-10-21 12:22:22

    Anda boleh menggunakan kursor sqlalchemy dan penerangan kursor.

    def rows_as_dicts(cursor):
        """convert tuple result to dict with cursor"""
        col_names = [i[0] for i in cursor.description]
        return [dict(zip(col_names, row)) for row in cursor]
    
    
    db = SQLAlchemy(app)
    # get cursor
    cursor = db.session.execute(sql).cursor
    # tuple result to dict
    result = rows_as_dicts(cursor)

    balas
    0
  • P粉421119778

    P粉4211197782023-10-21 00:09:40

    Jawapan dikemas kini untuk SQLAlchemy 1.4:

    Versi 1.4 telah menafikan yang lama engine.execute() 模式,并更改了 .execute() 内部运行的方式。 .execute() kini mengembalikan objek CursorResult dengan kaedah .mappings ():

    import sqlalchemy as sa
    
    # …
    
    with engine.begin() as conn:
        qry = sa.text("SELECT FirstName, LastName FROM clients WHERE ID < 3")
        resultset = conn.execute(qry)
        results_as_dict = resultset.mappings().all()
        pprint(results_as_dict)
        """
        [{'FirstName': 'Gord', 'LastName': 'Thompson'}, 
         {'FirstName': 'Bob', 'LastName': 'Loblaw'}]
        """
    

    (jawapan sebelumnya untuk SQLAlchemy 1.3)

    Jika anda menggunakan engine.execute 而不是 raw_connection(),SQLAlchemy 已经为您完成了此操作。使用engine.executefetchone将返回一个SQLAlchemy Row对象,fetchall将返回一个list< /code> Row 对象。 Row 对象可以通过键访问,就像 dict sama seperti:

    sql = "SELECT FirstName, LastName FROM clients WHERE ID = 1"
    result = engine.execute(sql).fetchone()
    print(type(result))  # <class 'sqlalchemy.engine.result.Row'>
    print(result['FirstName'])  # Gord
    

    Jika anda memerlukan objek dict sebenar, maka anda boleh menukarnya sahaja:

    my_dict = dict(result)
    print(my_dict)  # {'FirstName': 'Gord', 'LastName': 'Thompson'}
    

    balas
    0
  • Batalbalas