问题标签 [sqlalchemy-migrate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4761 浏览

python - 为什么我收到 SQLAlchemy 错误“__table_args__ 值必须是元组、字典或无”

我有以下 SQLAlchemy 模型。已成功迁移到数据库:

现在我想在第二个和第四个字段中添加一个唯一性约束。所以我将以下行添加到模型中:

但是现在当我尝试迁移它时,我收到以下错误:

为什么我会收到此错误?我该如何解决?我尝试将等式的右侧放在括号中,但这并没有解决问题。

0 投票
1 回答
779 浏览

python - Python 无法在 Docker 映像中找到 sqlalchemy-migrate

我的任务是 Dockerize 一个 Python 烧瓶应用程序。该应用程序的一部分使用 sqlite 来管理用户。我面临的问题是 python 抱怨它找不到 sqlalchemy-migrate 发行版。为了隔离应用程序,我编写了一个小程序来导入与应用程序相同的模块。

它在第二行立即失败

当我添加一个 RUN 命令来列出所有 sql 发行版时,我得到的输出告诉我发行版已安装。

此外,我转储了任何与 sql 相关的文件列表并得到以下信息

我的 Dockerfile

关于为什么这在 Docker 中失败的任何想法?

如果我在本地机器上设置 virtualenv 并安装相同的 pip 发行版,则 test.py 脚本将成功执行。

0 投票
2 回答
16482 浏览

python-3.x - 在 Alembic 迁移期间更新列内容

假设我的数据库模型包含一个对象User

我的数据库包含一个有n行的users表。在某些时候,我决定将其拆分为and ,并且在此期间我希望我的数据也能被迁移。namefirstnamelastnamealembic upgrade head

自动生成的Alembic迁移如下:

这个问题似乎有多种或多或少的hacky解决方案。这个这个都建议在迁移期间使用execute()bulk_insert()执行原始 SQL 语句。这个(不完整的)解决方案导入了当前的数据库模型,但是当模型发生变化时,这种方法很脆弱。

如何在 Alembic 迁移期间迁移和修改列数据的现有内容?推荐的方法是什么,它记录在哪里?

0 投票
0 回答
108 浏览

python - 运行 SQLAlchemy-Migrate 迁移引发 ValueError: too many values to unpack

当我尝试运行 SQLAlchemy-Migrate 迁移时,它给了我以下错误:

我以前见过这个。上次是由于我更新的列包含数据项。但是,这次添加新列给出了错误。

0 投票
0 回答
606 浏览

python - Flask-SQLAlchemy - 如何将绑定键添加到现有数据库

由于额外的数据,我决定重新组织原来的 SQLAlchemy 数据库并开始使用多个数据库。有没有办法更改表名并将绑定键添加到原始数据库?我搜索了 SQLAlchemy Migrate 的文档,但找不到任何东西。谢谢。

0 投票
1 回答
4512 浏览

python - SQLAlchemy-Migrate 或 Alembic 在重命名模型时删除数据

我正在使用 SQLAlchemy-Migrate 来管理我的 PostgreSQL 数据库的迁移。我更改__tablename__了模型,运行迁移更改了数据库中的名称,但表中的所有行都被删除了。如何在不删除数据的情况下重命名模型?

我将其重命名为contracttocontracts并获得此迁移:

它删除旧表并创建一个新表。我从未检查过其他迁移脚本,因为它们总是在不丢失数据的情况下运行。

0 投票
1 回答
548 浏览

python - 如何使用 SQLAlchemy(不是 flask_sqlalchemy 或 flask-merge)将数据插入到相互关联的关系表中?

我是 SQLAlchemy 的新手,我正在尝试使用 SQLAlchemy 构建一个练习项目。我创建了包含具有以下关系的表的数据库。现在我的问题是:

  1. 如何将数据插入到表中,因为它们是相互依赖的?
  2. 这会在数据库设计中形成循环吗?
  3. 循环数据库设计是一种不好的做法吗?如果这是一种不好的做法,如何解决这个问题?

    Department.manager_ssn ==> Employee.SSN

    Employee.department_id ==> Department.deptid

数据库关系图

以下是创建这个确切数据库的代码的当前版本。

请仅在 SQLAlchemy 中提供解决方案,而不是在 flask-sqlalchemy 或 flask-migrate 中提供,我使用的是 Python 3.6。

0 投票
2 回答
2447 浏览

python - SQL-alchemy:ValueError 太多值无法解包?

我有一个使用突然损坏的 sql-alchemy 包运行 mysql 数据库的网站。我做了一些研究,发现预期的问题是最新的 sql-alchemy 更新给 flask-admin 带来的价值比预期的多一个




建议的修复是编辑文件以接受第三项,但我无法使用我对环境的权限执行此操作。

另一个答案链接到 github 上的 repo,但我不知道这对我有什么帮助。我对此很陌生,我不知道我是否应该克隆 repo,或者如果我是的话,我该怎么做。

任何帮助表示赞赏!

这是错误转储

2018-01-22 20:01:59,593:[2018-01-22 20:01:59,592] 应用程序中的错误:/reservation/add [GET]
2018-01-22 20:01:59,594 异常:回溯(大多数最近通话最后):
2018-01-22 20:01:59,594:
文件“fakepath/flask/app.py”,第 1982 行,在 wsgi_app 2018-01-22
20:01:59,594:响应 = self.full_dispatch_request() 2018-01-22 20:01:59,594:文件“fakepath/flask/app.py”,第 1614 行,在 full_dispatch_request 2018-01-22
20:01:59,594:rv = self.handle_user_exception(e)
2018-01- 22 20:01:59,595:文件“fakepath/flask/app.py”,第 1517 行,在 handle_user_exception2018-01-22 20:01:59,595:reraise(exc_type,exc_value,tb)2018-01-22 20:01: 59,595:文件“fakepath/flask/_compat.py”,第 33 行,在 reraise
2018-01-22 20:01:59,595:提高价值 2018-01-22 20:01:59,595:文件“fakepath/flask/app.py”,第 1612 行,在 full_dispatch_request 2018-01-22
20:01:59,595 中: rv = self.dispatch_request() 2018-01-22
20:01:59,596:文件“fakepath/flask/app.py”,第 1598 行,在 dispatch_request2018-01-22 20:01:59,596 中:返回 self.view_functionsrule.endpoint
2018-01-22 20:01:59,596:文件“fakepath/flask_login/utils.py”,第 261 行,在 decorated_view
2018-01-22 20:01:59,596:返回 func(*args,**kwargs)
2018- 01-22 20:01:59,597:文件“/home/apoalphagammawebmaster/inventory/app/auth/views.py”,第 248 行,在 add_reservation 2018-01-22
20:01:59,597:form=form,title='添加预订')
2018-01-22 20:01:59,597:文件“fakepath/flask/template.py”,第 134 行,在 render_template2018-01-22 20:01:59,597:上下文,ctx.app)2018-01-22
20: 01:59,597:文件“fakepath/flask/template.py”,第 116 行,在 _render 中 2018-01-22
20:01:59,597:rv = template.render(context)
2018-01-22 20:01:59,598:文件“fakepath/jinja2/asyncsupport.py”,第 76 行,渲染
2018-01-22 20:01:59,598:返回 original_render(self, *args, **kwargs)2018-01-22 20:01:59,598:文件“fakepath/jinja2/environment.py”,第 1008 行,在渲染
2018-01-22 20:01:59,598:返回 self.environment.handle_exception(exc_info,True)2018-01-22
20:01:59,598:文件“fakepath/jinja2/environment.py”,第 780 行,在 handle_exception 中
2018-01-22 20:01:59,599: reraise(exc_type, exc_value, tb) 2018-01-22
20:01:59,599: 文件“fakepath/jinja2/_compat.py”,第 37 行,在 reraise
2018-01- 22 20:01:59,599: raise value.with_traceback(tb) 2018-01-22
20:01:59,599: 文件“/home/apoalphagammawebmaster/inventory/app/templates/auth/reservations/reservation.html”,第 2 行,在顶级模板代码
2018-01-22 20:01:59,599:
{% extends "base.html" %}
2018-01-22 20:01:59,599: 文件 "/home/apoalphagammawebmaster/inventory/app/templates /base.html”,第 48 行,顶级模板代码
2018-01-22 20:01:59,600: {% block body %}
2018-01-22 20:01:59,600:文件“/home/apoalphagammawebmaster/inventory/app/templates/auth/reservations/reservation.html”,第 27 行,在块“body”中 2018-01-22 20:01
: 59,600:{{ wtf.quick_form(form) }} 2018-01-22
20:01:59,600:文件“fakepath/jinja2/runtime.py”,第 579 行,在 _invoke 2018-01-22
20:01:59,600 中: rv = self._func(*arguments) 2018-01-22
20:01:59,601:文件“fakepath/flask_bootstrap/templates/bootstrap/wtf.html”,第 205 行,模板
2018-01-22 20:01:59,601 :{{ form_field(字段,2018-01-22 20:01:59,601:文件“fakepath/jinja2/runtime.py”,第 579 行,在 _invoke 2018-01-22
20:01:59,601:rv = self._func (*参数)
2018-01-22 20:01:59,601:文件“fakepath/flask_bootstrap/templates/bootstrap/wtf.html”,第 123 行,模板
2018-01-22 20:01:59,601:
{{field(class="form -control", **kwargs)|safe}}
2018-01-22 20:01:59,601:文件“fakepath/wtforms/fields/core.py”,第 153 行, 调用
2018-01-22 20:01 : 59,601:返回 self.meta.render_field(self,kwargs)
2018-01-22 20:01:59,602:
文件“fakepath/wtforms/meta.py”,第 56 行,在 render_field2018-01-22 20:01:59,602 中: return field.widget(field, **render_kw) 2018-01-22
20:01:59,602:文件“fakepath/wtforms/widgets/core.py”,第 287 行,调用2018-01-22 20:01:59,602 :对于 val,标签,在 field.iter_choices() 中选择:
2018-01-22 20:01:59,602:文件“fakepath/wtforms/ext/sqlalchemy/fields.py”,第 107 行,在 iter_choices 2018-01-22
20:01:59,602:对于 pk,self._get_object_list 中的 obj ():
2018-01-22 20:01:59,602:文件“fakepath/wtforms/ext/sqlalchemy/fields.py”,第 100 行,在 _get_object_list 2018-01-22
20:01:59,602:self._object_list = list ((text_type(get_pk(obj)), obj) for obj in query)
2018-01-22 20:01:59,603:文件“fakepath/wtforms/ext/sqlalchemy/fields.py”,第 100 行,
2018-01 -22 20:01:59,603:self._object_list = list((text_type(get_pk(obj)), obj) for obj in query)
2018-01-22 20:01:59,603:文件“fakepath/wtforms/ext/sqlalchemy /fields.py”,第 189 行,在 get_pk_from_identity 中
2018-01-22 20:01:59,603: cls, key = identity_key(instance=obj)
2018-01-22 20:01:59,603: ValueError: 要解包的值太多(预期 2)

0 投票
1 回答
343 浏览

python - Flask-SqlAlchemy 声明模型

这是 application.py 文件:

我发现,我可以用两种不同的方式声明模型。

或者

哪一个是正确的或所有这些意味着什么?

0 投票
1 回答
1498 浏览

python - 具有一对多关系的 Flask-Migration

我有一个工作博客系统。我想将它添加到评论系统。我使用带有 id、title 和 body 的 post 模型完成了迁移。

现在我添加评论并创建名为 Comment 的新模型。当我运行迁移时:

信息 [alembic.runtime.migration] 上下文 impl MySQLImpl。

INFO [alembic.runtime.migration] 将假定非事务性 DDL。

INFO [alembic.env] 未检测到架构更改。

我不知道我的代码有什么问题。我从文档中获取关系并对其进行编辑。db 之前没有任何评论表。

编辑1:我在运行中调用评论如下: from model.comment import Comment

之后我可以创建迁移但迁移出现如下错误:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1005, 'Can\'t create table blog_db. blog.comment(errno: 150 "Foreign key constraint is wrongly forms")') [SQL: '\nCREATE TABLE blog.comment(\n\ tid INTEGER NOT NULL AUTO_INCREMENT, \n\tname VARCHAR(255) NOT NULL, \n\tbody TEXT NOT NULL, \n\tcreated DATETIME DEFAULT now(), \n\tstatus INTEGER NOT NULL, \n\tpost_id INTEGER NOT NULL , \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(post_id) REFERENCES blog.post (id)\n)\n\n'] (此错误的背景:http ://sqlalche.me/e /2j85 )