91991


pandasを使って、sqliteからデータを読み込む例です。

[code]

    from sqlalchemy import create_engine
    import pandas as pd
    
    engine = create_engine('sqlite:///:memory:')
    
    with engine.connect() as conn, conn.begin():
        data = pd.read_sql_table('data', conn)
    
[/code]

with文の基本的な使い方は知っているけど、asの後で関数の呼び出しは見たことないです。このconn.begin()の役割を教えていただければ幸いです。


CC BY-SA 4.0
2022-11-04T07:55:46.670
91989
2022-11-04T08:28:09.327
2022-11-04T08:28:09.327
3054
53858
question
python sql sqlalchemy
Python with..asの後で関数の追記する使い方の意味


そう難しい話ではなく, 以下と同等で 後側の `as` がないだけです  
(`.begin()` とはなにか？という質問ならトランザクションの開始です)

[code]

    with engine.connect() as conn:
        with conn.begin():
            pass # なにか処理
    
[/code]

またこれらは次のようにもできます

[code]

    with engine.begin() as conn:
        pass # なにか処理
    
[/code]

参考: (docs.sqlalchemy.org) [Working with Engines and Connections: Using
Transactions](https://docs.sqlalchemy.org/en/14/core/connections.html#using-
transactions)


CC BY-SA 4.0
2022-11-04T08:24:47.723
91991
2022-11-04T08:24:47.723
43025
91989
answer


With文では、複数のコンテキストマネージャを使えます。それらは入れ子にされたように振舞います。

> 複数の要素があるとき、コンテキストマネージャは複数の with 文がネストされたかのように進行します:
[code]

>     with A() as a, B() as b:
>         SUITE
>  
[/code]

>
> これは次と等価です:
[code]

>     with A() as a:
>         with B() as b:
>             SUITE
>  
[/code]

>
> —— [with 文](https://docs.python.org/ja/3/reference/compound_stmts.html#the-
> with-statement)

質問のコードは上の例でいうところの `as b` が省略されたものです。つまり、

[code]

    with engine.connect() as conn:
        with conn.begin():
    
[/code]

となります。


CC BY-SA 4.0
2022-11-04T08:25:59.703
91992
2022-11-04T08:25:59.703
3054
91989
answer