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

AttributeError:__ exit__ on python 3.4

    接続をコンテキストマネージャーとして使用しようとしています:

    with conn:
    

    このオブジェクトは、そのように使用するために必要なメソッドを実装していません。 __exit__ メソッド

    異なるを使用するチュートリアルまたはドキュメントを読んでいる場合 MySQLライブラリ、この機能は一部でサポートされている可能性があることに注意してください ライブラリ、これだけではありません。 MySQLdbプロジェクト たとえば、それをサポートします。

    特定の この場合、with conn:を使用する必要はありません。 まったく行;データベースに変更を加えていないので、どこにもコミットは必要ありません。 with conn:で安全に削除できます 行(その下のすべてのインデントを1ステップ外します)。それ以外の場合は、コンテキストマネージャーを手動のconn.commit()に置き換えることができます。 他の場所。

    または、 @contextlib.contextmanager() デコレータ

    from contextlib import contextmanager
    
    @contextmanager
    def manage_transaction(conn, *args, **kw):
        exc = False
        try:
            try:
                conn.start_transaction(*args, **kw)
                yield conn.cursor()
            except:
                exc = True
                conn.rollback()
        finally:
            if not exc:
                conn.commit()
    

    これを次のように使用します:

    with manage_transaction(conn) as cursor:
        # do things, including creating extra cursors
    

    ここで、 connection.start_transaction() 電話




    1. WordPressは一度に2つのカスタムフィールドで投稿を注文します

    2. SELECT ... ORDER BY ... FOR UPDATEステートメントで行が順番にロックされていますか?

    3. インデックスとソートの列順序に関する考慮事項

    4. mysql_num_rows()は、パラメーター1がリソースであると想定しています。ブール値はC:\ wamp\wwwで指定されます。