我正在使用sqlite数据库。我只是修改了名为“user”的表,通过sqlite数据库的控制台添加了一个名为“email\u confirmed”的新列(整数类型)。
我的命令是:
ALTER users ADD COLUMN email_confirmed INTEGER;
但是,因为我仍然没有通过models.py中的python代码添加它,所以我无法在程序中使用变量“email\u confirmed”。
我的代码(models.py)如下。
我正在努力解决这个问题,如果我不能解决这个问题,我就不能转移到另一个领域。。。如果您能告诉我应该在models.py,terminal中添加、修复或编写什么,我将非常感激,这样我就可以开始使用我的email变量了。
-型号.py
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
profile_image = db.Column(db.String(64), nullable=False, default='default_profile.jpg' ) #nullable means "it cannot be blank"
email = db.Column(db.String(64), unique=True, index=True) #DON'T REALLY GET THE IDEA OF index=True
first_name = db.Column(db.String(20))
last_name = db.Column(db.String(20))
middle_name = db.Column(db.String(20), default='', nullable=True)
username = first_name+middle_name+last_name
password_hash = db.Column(db.String(128))
# email_confirmed = db.Column(db.Integer, server_default='1', nullable=False)
#Should I add the codes above?
def __init__(self,email,first_name, middle_name, last_name, password,{#email_confirmed#}):
self.email = email
self.first_name = first_name
self.middle_name = middle_name
self.last_name = last_name
self.password_hash = generate_password_hash(password)
#self.email_confirmed = email_confirmed
p、 s/当我在上面的代码中编写注解掉的代码并迁移数据库时,我的终端说:“error[root]error:目标数据库不是最新的。”
另外,如果我将当前的迁移版本升级到下图中的版本,我会删除我通过控制台添加的新列“email\u confirmed”。
我执行的“alter…add column”命令在迁移文件中的代码如下所示:
op.add_column('users', sa.Column('email_confirmed', sa.INTEGER(), nullable=True))
谢谢你的帮助!
2条答案
按热度按时间neekobn81#
主要的问题是,django希望控制数据库。
django通常应该怎么做:
您创建模型,django将创建表。
你修改了一个模型,
您应该创建一个迁移并应用迁移,然后应用所有必需的数据库更改。
更改数据库然后修改模型会带来麻烦,因为手动alter表中可能缺少一些细微的参数。
有几种方法可以解决这个问题。
1.)更改模型,手动更改表,并执行假迁移
手动将表更改为与django完全相同的状态
应用假迁移
2.)转储旧数据、更改模型、创建新数据库和导入/复制数据。
创建当前数据库的完全转储
删除它(或者对于sqlite,只需重命名db文件)
编辑
models.py
用django创建一个新的空数据库manage.py migrate
)尝试将转储还原到新创建的数据库(如果字段名和字段类型相同,则应该可以)
如果您对django创建的迁移文件有任何问题,并且您的代码只在一台服务器上运行,那么只需删除所有迁移文件(同时删除数据库中所有相关的.pyc文件)
__pycache__
目录)重新创建初始迁移。请确切地告诉我们目前的情况。
附录20200723:
如果发布当前数据库文件的确切当前架构,可能会有所帮助。
你可以这样做
34gzjxbg2#
下面这些图片是给@gelonida的
我目前的迁移版本是在新生活10,不知何故,如果我升级到新生活11版,它将从电子邮件确认栏。这对我的模型和“users”表的数据库都有效吗?我只是想纠正这个错误,回到我正确的地方,再做一次正确的事情。非常感谢你对我的帮助!