sql >> データベース >  >> RDS >> Mysql

SQLAlchemyでdictとしてクエリ結果を取得する

    SQLAlchemy 1.4の回答を更新:

    バージョン1.4では、古いengine.execute()が廃止されました。 パターンを作成し、.execute()の方法を変更しました 内部で動作します。 .execute() CursorResult を返すようになりました .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'}]
        """
    

    (SQLAlchemy 1.3の以前の回答)

    engine.executeを使用する場合、SQLAlchemyはすでにこれを行っています。 raw_connection()の代わりに 。 engine.executeを使用 、fetchone SQLAlchemyのRowを返します オブジェクトとfetchall listを返します Rowの オブジェクト。 Row dictと同じように、オブジェクトにはキーでアクセスできます :

    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
    

    真のdictが必要な場合 オブジェクトの場合は、変換するだけです:

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


    1. 重複クエリの最適化パート1:導入と拡張T-SQLソリューション

    2. Hibernate + c3p0 + MySqlが多数のスリープ接続を作成するのを防ぐにはどうすればよいですか?

    3. OracleのREGEXP_INSTR()関数

    4. 日付でより大きい演算子を使用するにはどうすればよいですか?