sql—我只是修改了sqlite表,并通过控制台添加了一列;如何将此命令添加到python文件或迁移文件中?

7ivaypg9  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(230)

我正在使用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))


谢谢你的帮助!

neekobn8

neekobn81#

主要的问题是,django希望控制数据库。
django通常应该怎么做:
您创建模型,django将创建表。
你修改了一个模型,
您应该创建一个迁移并应用迁移,然后应用所有必需的数据库更改。
更改数据库然后修改模型会带来麻烦,因为手动alter表中可能缺少一些细微的参数。
有几种方法可以解决这个问题。
1.)更改模型,手动更改表,并执行假迁移
手动将表更改为与django完全相同的状态
应用假迁移
2.)转储旧数据、更改模型、创建新数据库和导入/复制数据。
创建当前数据库的完全转储
删除它(或者对于sqlite,只需重命名db文件)
编辑 models.py 用django创建一个新的空数据库 manage.py migrate )
尝试将转储还原到新创建的数据库(如果字段名和字段类型相同,则应该可以)
如果您对django创建的迁移文件有任何问题,并且您的代码只在一台服务器上运行,那么只需删除所有迁移文件(同时删除数据库中所有相关的.pyc文件) __pycache__ 目录)重新创建初始迁移。
请确切地告诉我们目前的情况。
附录20200723:
如果发布当前数据库文件的确切当前架构,可能会有所帮助。
你可以这样做

sqlite3 databasefile.db ".schema users"
34gzjxbg

34gzjxbg2#

下面这些图片是给@gelonida的
我目前的迁移版本是在新生活10,不知何故,如果我升级到新生活11版,它将从电子邮件确认栏。这对我的模型和“users”表的数据库都有效吗?我只是想纠正这个错误,回到我正确的地方,再做一次正确的事情。非常感谢你对我的帮助!


相关问题