我正在使用sqlite数据库。我只是修改了名为“User”的表,通过sqlite数据库的控制台添加了一个名为“email\u confirm”的新列(整型)
我的命令是:
ALTER users ADD COLUMN email_confirmed INTEGER;
但是,因为我仍然没有通过models.py中的Python代码添加它,所以我无法在程序中使用变量“email_confirm”。
我的代码(models.py)如下。
我正在努力解决这个问题,如果我不能解决这个问题,我就不能进入另一个领域。。。如果您能告诉我应该在models.py、terminal中添加、修复或编写什么,以便我可以开始使用我的email\u变量,我将不胜感激
-Models.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/当我在上面的代码中写下我注释掉的代码并迁移数据库时,我的终端说:“错误[root]错误:目标数据库不是最新的。”
另外,不知何故,如果我将当前迁移版本升级到下图中的版本,我将删除通过控制台添加的新列“email_confirm”
我执行的“ALTER…ADD COLUMN”命令在迁移文件中显示如下代码:
op.add_column('users', sa.Column('email_confirmed', sa.INTEGER(), nullable=True))
谢谢你的帮助
主要问题是,Django希望控制数据库
Django通常应该如何处理:
更改数据库然后修改模型会带来麻烦,因为手动alter表中可能缺少一些细微的参数
有几种方法可以解决这个问题
1.)更改模型,手动更改表,并执行假迁移
2.)转储旧数据、更改模型、创建新数据库并导入/复制数据。
models.py
manage.py migrate
)如果您对Django创建的迁移文件有任何问题,并且您的代码仅在一台服务器上运行,那么只需删除所有迁移文件(并删除
__pycache__
目录中所有相关的.pyc文件),然后从头开始重新创建初始迁移请确切地告诉我们目前的情况
附录20200723:
如果发布当前数据库文件的确切当前架构,可能会有所帮助
你可以用它来做这个
下面这些图片是为@gelonida拍摄的
我目前的迁移版本是新生活10版,如果我升级到新生活11版,它将从email_确认栏中删除。这对我的模型和“users”表的数据库都有效吗?我只是想纠正这个错误,回到我正确的地方,再做一次正确的事情。非常感谢你对我的帮助
相关问题 更多 >
编程相关推荐