Saya melakukan beberapa pekerjaan dengan PostgreSQL 9.3 menggunakan psycopg2
API database.
Saya memiliki DB API yang diatur dalam level isolasi minimum (mode "autocommit"), dan saya mengelola transaksi saya sendiri secara langsung melalui SQL. Contoh:
cur = self.conn.cursor()
cur.execute("BEGIN;")
cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, ))
ret = cur.fetchall()
cur.execute("COMMIT;")
Pada dasarnya, apakah transaksi yang dimulai oleh cur.execute("BEGIN;")
terbatas hanya pada kursor itu, atau apakah untuk seluruh koneksi ( self.conn.cursor()
)?
Beberapa hal yang lebih kompleks yang saya lakukan melibatkan beberapa operasi basis data yang terpisah, yang secara logis saya uraikan menjadi beberapa fungsi. Karena ini semua ada di kelas yang memiliki koneksi sebagai anggota, itu jauh lebih nyaman untuk membuat kursor dalam setiap fungsi. Namun, saya tidak yakin bagaimana cara membuat kursor dalam suatu transaksi bekerja.
Pada dasarnya, jika transaksi adalah per-koneksi, saya hanya bisa membuat banyak kursor on-the-fly dalam transaksi. Jika mereka per kursor, itu berarti saya harus melewati kursor di mana-mana. Yang mana itu?
Dokumentasi tidak menyentuh ini, meskipun fakta bahwa Anda dapat menelepon connection.commit()
membuat saya cukup yakin kontrol transaksi adalah per-koneksi.