我应该使用多个游标吗?

时间:2018-02-23 15:06:15

标签: python firebird connection cursors

我正在尝试开发一个软件(Python 3 - Tkinter)来处理2个firebird数据库。数据库" A"是至关重要的,所以我的程序只允许在其上执行select语句。数据库" B"直接从我的程序填充,因此授予完全访问权限。

我创建了多个python类来保存各种窗口(每个窗口一个类),并且在每个类中我需要1)在数据库A上执行SELECT语句,2)在数据库B上执行SELECT / INSERT / INSERT OR UPDATE语句

我想知道的是我应该如何组织连接对象和游标。我想我应该在主应用程序中打开连接,但我不知道是否:

  1. 为每个连接只创建一个游标,并将这些游标用于不同类中的每个语句:

    conA=fdb.connect(database A)
    conA.begin(fdb.ISOLATION_LEVEL_READ_COMMITED_RO)
    cursorA=conA.cursor()
    
    conB=fdb.connect(database B)
    cursorB=conB.cursor()
    
    Class example1():
        cursorA.execute("SELECT ......")
        cursorB.execute("SELECT.......")
        cursorB.execute("INSERT INTO...")
    Class example2():
        cursorA.execute("SELECT ......")
        cursorB.execute("SELECT.......")
        cursorB.execute("INSERT INTO...")
    
  2. 在每个类中直接创建多个游标,每个游标一个:

    conA=fdb.connect(database A)
    conA.begin(fdb.ISOLATION_LEVEL_READ_COMMITED_RO)
    
    conB=fdb.connect(database B)
    
    Class example1():
        cursorA1=conA.cursor()
        cursorA1.execute("SELECT ......")
    
        cursorB1=conB.cursor()
        cursorB2=conB.cursor()
        cursorB1.execute("SELECT.......")
        cursorB2.execute("INSERT INTO...")
    Class example2():
        cursorA2=conA.cursor()
        cursorA2.execute("SELECT ......")
    
        cursorB3=conB.cursor()
        cursorB4=conB.cursor()
        cursorB3.execute("SELECT.......")
        cursorB4.execute("INSERT INTO...")
    
  3. 每次需要连接时,打开并关闭每个类中的整个连接(和游标):

    Class example1():
        conA=fdb.connect(database A)
        conA.begin(fdb.ISOLATION_LEVEL_READ_COMMITED_RO)
        cursorA=conA.cursor()
        cursorA.execute("SELECT ......")
        conA.close()
    
        conB=fdb.connect(database B)
        cursorB=conB.cursor()
        cursorB.execute("SELECT ......")
        cursorB.execute("INSERT ......")
        conB.close()
    

    (其他课程相同)

  4. 那么,这些选项中的任何一个都适合吗?

0 个答案:

没有答案