sqlite3.Connection类继承,提交不生效

0 投票
1 回答
963 浏览
提问于 2025-04-17 19:55

这是我第一次通过类的继承来使用sqlite3,但我遇到了一个问题:我没有收到任何错误提示,但我执行的查询却没有被保存。我把我的代码简化了一下。

import sqlite3 as lite

class BaseModel(lite.Connection):
    def __init__(self, **args):
        lite.Connection.__init__(self, **args)  
        self.cur = self.cursor()

    def execute(self, query):
        self.cur.execute(query)




class Model(BaseModel):
    def __init__(self, **args):
        BaseModel.__init__(self, **args)

    def _new_(self):
        queries = []        
        queries.append(' '.join(['CREATE TABLE IF NOT EXISTS tb1',
                         '(id INTEGER PRIMARY KEY,',
                         'column1 TEXT,', 
                         'column2 INT)']))

        for q in queries:
            self.execute(q) # execute the queries

        self.commit()   # write changes to db   

    def tables(self):
        query = 'SELECT name FROM sqlite_master WHERE type="table" ORDER BY name' 
        results = self.execute(query) 
        return results#.fetchall()



if __name__ == '__main__':
    model = Model(database='test.db')
    model._new_()

    # Test Fails because the queries aren't being saved in the db
    # see Model.__new__ for details

    tables = model.tables() # get all tables

    print 'Tables Created:'

    if tables:
        for t in model.tables(): 
            print '\t%s' % str(t[0])
    else: print tables

1 个回答

2

你需要调用self.commit()

self.commit() # write changes to db   

如果没有(),你只是引用了这个方法,而没有真正去执行它。

接下来,你的execute()函数没有返回任何东西:

def execute(self, query):
    return self.cur.execute(query)

撰写回答