ฉันทำงานกับ PostgreSQL 9.3 โดยใช้psycopg2
API ฐานข้อมูล
ฉันได้ตั้งค่า API API ในระดับการแยกขั้นต่ำ (โหมด "autocommit") และกำลังจัดการธุรกรรมของฉันเองโดยตรงผ่าน SQL ตัวอย่าง:
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;")
โดยพื้นฐานแล้วธุรกรรมที่เริ่มต้นด้วยการcur.execute("BEGIN;")
จำกัด เพียงเคอร์เซอร์นั้นหรือสำหรับการเชื่อมต่อทั้งหมด ( self.conn.cursor()
)?
สิ่งที่ซับซ้อนยิ่งกว่าที่ฉันกำลังทำอยู่นั้นเกี่ยวข้องกับการดำเนินการฐานข้อมูลแยกกันหลายครั้ง เนื่องจากทั้งหมดนี้อยู่ในคลาสที่มีการเชื่อมต่อเป็นสมาชิกจึงสะดวกยิ่งขึ้นในการสร้างเคอร์เซอร์ภายในแต่ละฟังก์ชั่น อย่างไรก็ตามฉันไม่แน่ใจว่าการสร้างเคอร์เซอร์ภายในธุรกรรมได้อย่างไร
โดยพื้นฐานแล้วถ้าธุรกรรมต่อการเชื่อมต่อฉันสามารถสร้างเคอร์เซอร์จำนวนมากได้ทันทีภายในธุรกรรม หากพวกเขาต่อเคอร์เซอร์นั่นหมายความว่าฉันต้องผ่านเคอร์เซอร์ไปทุกที่ มันคืออะไร
เอกสารไม่ได้สัมผัสกับสิ่งนี้แม้ว่าความจริงที่ว่าคุณสามารถโทรได้connection.commit()
ทำให้ฉันมั่นใจอย่างเป็นธรรมว่าการควบคุมการทำธุรกรรมนั้นเป็นการเชื่อมต่อ