我已经创建了一些模型,当我运行pageID = driver.find_element_by_xpath("//meta[@property='og:url']").get_attribute("content")
命令时,它会创建迁移文件,所以很好。
python manage.py db migrate
命令还会在数据库中创建表。
如果我再次运行python manage.py db upgrade
命令,那么它将为我最近升级的那些模型创建迁移文件。
您能帮我解决吗?
答案 0 :(得分:0)
我认为问题在于manage.py。如果您按照flask-migration网站上的说明进行了操作,并将所有模型存储在此文件中-flask-migration仅获取这些模型并生成迁移并将始终执行。您将标准命令包装在文件中,这就是问题所在。
如果要修复它-将模型存储在另一个目录(或另一个文件)中,请将它们添加到应用程序中并使用命令flask db migrate
。在这种情况下,flask-migration仅会在第一次时为模型生成迁移,对于其他人,它将检测到更改并仅针对更改生成迁移。
但请注意,烧瓶迁移不会看到所有更改。来自网站:
需要检查和编辑迁移脚本,因为Alembic当前无法检测到您对模型所做的每项更改。特别是,Alembic当前无法检测表名称更改,列名称更改或匿名命名的约束。限制的详细摘要可以在Alembic自动生成文档中找到。
答案 1 :(得分:0)
我遇到了同样的问题,并且已经解决了。
就我而言,获取当前表名存在问题。 (在_autogen_for_tables((alembic / autogenerate / compare.py)中调用get_table_names函数)时
我正在将sqlalchemy与mysql-connector一起使用。 mysql-connector以字节数组形式返回表信息。 所以我暂时改变了以下内容。 (base.py(sqlalchemy / dialects / mysql))
@reflection.cache
def get_table_names(self, connection, schema=None, **kw):
"""Return a Unicode SHOW TABLES from a given schema."""
if schema is not None:
current_schema = schema
else:
current_schema = self.default_schema_name
charset = self._connection_charset
if self.server_version_info < (5, 0, 2):
rp = connection.execute(
"SHOW TABLES FROM %s"
% self.identifier_preparer.quote_identifier(current_schema)
)
return [
row[0] for row in self._compat_fetchall(rp, charset=charset)
]
else:
rp = connection.execute(
"SHOW FULL TABLES FROM %s"
% self.identifier_preparer.quote_identifier(current_schema)
)
return [
row[0]
for row in self._compat_fetchall(rp, charset=charset)
if row[1] == "BASE TABLE"
]
到
@reflection.cache
def get_table_names(self, connection, schema=None, **kw):
"""Return a Unicode SHOW TABLES from a given schema."""
if schema is not None:
current_schema = schema
else:
current_schema = self.default_schema_name
charset = self._connection_charset
if self.server_version_info < (5, 0, 2):
rp = connection.execute(
"SHOW TABLES FROM %s"
% self.identifier_preparer.quote_identifier(current_schema)
)
return [
row[0] for row in self._compat_fetchall(rp, charset=charset)
]
else:
rp = connection.execute(
"SHOW FULL TABLES FROM %s"
% self.identifier_preparer.quote_identifier(current_schema)
)
return [
row[0].decode("utf-8")
for row in self._compat_fetchall(rp, charset=charset)
if row[1].decode("utf-8") == "BASE TABLE"
]