0
我正在使用peewee
模塊管理Sqlite
數據庫中的數據。我的用例場景是我將創建一個包含特定字段的數據庫。我還需要在某些時候將列添加到現有數據庫中。下面是我的代碼,應該按預期工作:新列插入後peewee無法插入數據
from peewee import *
import os
from playhouse.migrate import *
my_db = SqliteDatabase('my_database.db')
migrator = SqliteMigrator(my_db)
class FirstTable(Model):
first_name = CharField(null=True)
last_name = CharField(null=True)
class Meta:
database = my_db
class Checkit:
def __init__(self):
self.db = my_db
self.migrator = migrator
def makeDatabse(self):
if os.path.exists("my_database.db"):
print "File Exists remove it"
os.remove("my_database.db")
try:
self.db.connect()
self.db.create_tables([FirstTable,])
except OperationalError:
print "Table Exists"
def insertDatas(self):
with self.db.atomic():
for i in range(10):
first_name_ = "Hello " + str(i)
last_name_ = "World " + str(i)
db_ = FirstTable(first_name=first_name_, last_name = last_name_)
db_.save()
def alterDatabase(self, columns):
with self.db.transaction():
columnField = CharField(null=True)
for column in columns:
migrate(migrator.add_column("firsttable", column, columnField))
def insertAfterAlteringDatabase(self):
with self.db.atomic():
for i in range(20,30):
first_name_ = "Hello " + str(i)
last_name_ = "World " + str(i)
address_ = "Address " + str(i)
db_ = FirstTable(first_name=first_name_, last_name = last_name_, address=address_)
db_.save()
ch = Checkit()
ch.makeDatabse()
ch.insertDatas()
ch.alterDatabase(["address"])
ch.insertAfterAlteringDatabase()
增加了其null=True
新列address
後,我做了一些插入數據庫的改變。我期望看到地址數據到address
字段,但我沒有得到任何這些數據。相反它是NULL
。我的代碼應該可以正常工作,但不能按預期工作。這裏有什麼問題?
這似乎是個竅門。我認爲添加代碼的縮進是錯誤的。它不應該在循環內嗎?謝謝。 – Pant