Tôi đang thực hiện một số công việc với PostgreQuery 9.3 bằng psycopg2
API cơ sở dữ liệu.
Tôi có API DB được đặt ở mức cô lập tối thiểu (chế độ "tự động tự động") và đang quản lý các giao dịch của riêng tôi trực tiếp thông qua SQL. Thí dụ:
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;")
Về cơ bản, giao dịch được bắt đầu bởi cur.execute("BEGIN;")
giới hạn chỉ con trỏ đó hay là cho toàn bộ kết nối ( self.conn.cursor()
)?
Một số điều phức tạp hơn tôi đang làm liên quan đến nhiều hoạt động cơ sở dữ liệu riêng biệt, mà tôi phân tích một cách hợp lý thành các hàm. Vì đây là tất cả trong một lớp có kết nối với tư cách là thành viên, nên việc tạo con trỏ trong mỗi chức năng sẽ thuận tiện hơn rất nhiều. Tuy nhiên, tôi không chắc cách tạo con trỏ trong giao dịch hoạt động.
Về cơ bản, nếu các giao dịch là mỗi kết nối, tôi chỉ có thể tạo ra nhiều con trỏ đang hoạt động trong giao dịch. Nếu chúng là mỗi con trỏ, điều đó có nghĩa là tôi phải đưa con trỏ đi khắp nơi. Đó là cái gì
Tài liệu này không đề cập đến vấn đề này, mặc dù thực tế là bạn có thể gọi connection.commit()
khiến tôi khá tự tin rằng kiểm soát giao dịch là trên mỗi kết nối.