Это мой первый опыт использования sqlite3 через наследование классов, и я столкнулся с проблемой, когда у меня нет ошибок трассировки, но выполняемые мной запросы не будут выполняться. Я упростили мой кодsqlite3.Connection class inheritance, commit not working
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
Обычно, это '__new__', не' _new_', но я подозреваю, что было преднамеренным. Это делает ваш код довольно запутанным для разбора. –
Извините, на самом деле я не думал об этом. – Crispy
См. [Основная настройка] (http://docs.python.org/2/reference/datamodel.html#basic-customization), но я думаю, что вы действительно не хотите или должны использовать '__new__' в этом случае. –