0

クラス継承を介して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
4

1 に答える 1

2

あなたは呼び出す self.commit()必要があります:

self.commit() # write changes to db   

がなければ、メソッドを呼び出すのではなく、参照()するだけです。

次に、execute()関数は何も返しません。

def execute(self, query):
    return self.cur.execute(query)
于 2013-03-21T19:19:01.467 に答える