标签: flask-sqlalchemy

Flask 迁移:创建表和使用数据库中现有的 Enum 时出现问题。`create_type=False` 不起作用

我正在使用flask-migrate、SQLAlchemy 和alembic 来管理我的数据库。我想在数据库中创建一个新表。新表有一列使用现有的Enum. 我读过很多这样的问题,你可以使用现有的Enum带有create_type=False标志。这似乎对我不起作用。请参阅upgrade()下面我的修订文件中的功能。

def upgrade():
    op.create_table(
        'label',
        sa.Column('id', UUID(as_uuid=True), default=uuid4),
        sa.Column('labelText', sa.Text, nullable=False),  
        sa.Column('sourceCountry', sa.Enum('it', 'gb', 'gr', 'bg', 'pt', name='country', create_type=False), nullable=True),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('id')

    )
    op.add_column('entity', sa.Column('labelId', UUID(as_uuid=True)))
    op.create_foreign_key(
        'fk_entity_label',
        'entity', 'label',
        ['labelId'], ['id'],
    )
Run Code Online (Sandbox Code Playgroud)

这是我的版本:

Flask==1.1.1
Flask-Ext==0.1
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-SQLAlchemy==2.4.1
alembic==1.4.1
Run Code Online (Sandbox Code Playgroud)

我的错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateObject) type "country" already exists

[SQL: CREATE TYPE country AS ENUM ('it', 'gb', 'gr', 'bg', 'pt')]
(Background on this error at: http://sqlalche.me/e/f405)
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask-sqlalchemy alembic flask-migrate

3
推荐指数
1
解决办法
1009
查看次数

sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)致命:数据库不存在

我正在尝试使用 SQLAlchemy 中的两个表填充数据库。我已经创建了数据库 test_database,现在我尝试在其中创建 2 个表。我已经检查过该数据库是否已使用 成功创建\l。以下是文件 create.py 的代码,它创建一个包含两个表的数据库:

import os

from flask import Flask, render_template, request
from models import *

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database.db' 
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# db = SQLAlchemy()
db.init_app(app)


def main():
    db.create_all()

if __name__ == "__main__":
    with app.app_context():
        main()
Run Code Online (Sandbox Code Playgroud)

这个文件create.py导入了model.py,生成了两个表,其代码如下:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Flight(db.Model):
    __tablename__ = "flights"
    id = db.Column(db.Integer, primary_key=True)
    origin = db.Column(db.String, nullable=False)
    destination = db.Column(db.String, nullable=False)
    duration = db.Column(db.Integer, nullable=False) …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

3
推荐指数
1
解决办法
1万
查看次数

无法从部分初始化的模块“models”导入名称“db”(很可能是由于循环导入)

我可以使用以下命令运行烧瓶测试python -m unittest discover -p testing.py,但是当我尝试运行时,python app.py runserver它会显示以下错误消息:

Traceback (most recent call last):
  File "app.py", line 10, in <module>
    from models import db
  File "/home/paula/projects/envioclicktest/restaurant_flask/models.py", line 1, in <module>
    from app import app as app
  File "/home/paula/projects/envioclicktest/restaurant_flask/app.py", line 10, in <module>
    from models import db
ImportError: cannot import name 'db' from partially initialized module 'models'
(most likely due to a circular import) (/home/paula/projects/envioclicktest/restaurant_flask/models.py)
Run Code Online (Sandbox Code Playgroud)

我的项目结构如下:

-restaurant_flask
    |-app.py
    |-models.py
    |-testing.py
Run Code Online (Sandbox Code Playgroud)

这是我的文件的内容以及我认为在每个文件中造成麻烦的行

应用程序.py

from flask import Flask
from flask_script …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy python-unittest

3
推荐指数
1
解决办法
2万
查看次数

Flask Migrate (Alembic) 不创建迁移

我有一个相当大的 Flask 应用程序,创建新数据表的典型工作流程如下:

我在 models.py 中创建一个类,如下所示:

class ExampleModel(db.Model):
    __tablename__ = 'example_table'

    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(100))
Run Code Online (Sandbox Code Playgroud)

然后我跑了flask db migrate,然后flask db upgrade。这些命令之后,表已创建,我可以正常插入数据

item = ExampleModel(text='something')
db.session.add(item)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

到目前为止,我在使用上述工作流程时没有遇到任何问题,甚至在我开始遇到问题之前也是如此。我添加了一个表,然后向其中添加了一些列,基本上只是遇到了可为空值之类的问题(用户错误)。除了删除一些模型类、迁移脚本以及手动删除 psql 中的一个表(我使用的是 Postgres)之外,我没有做太多事情。

现在,我无法从上面执行测试用例(ExampleModel)。当我尝试这个简单的示例时,迁移目录中没有创建迁移脚本

输出来自flask db migrate

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)

输出来自flask db upgrade

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 从 master 开始变基,本质上是从头开始
  • 使用上面的测试模型
  • 删除migrations目录并创建一个新目录

我的配置和初始化文件应该没问题——自从上次工作以来它们没有改变。我被这个难住了

python flask flask-sqlalchemy alembic flask-migrate

3
推荐指数
1
解决办法
3463
查看次数

如何从 API 响应 Flask_restful 返回文件?

我有两个 API,其中一个基本上用于根据发送的数据生成 PDF。

下面是第一个 API 端点

http://localhost:5000/api/sendReceiptData
Run Code Online (Sandbox Code Playgroud)

以附件形式返回 PDF 文件。

第二个 API 将使用第一个 API,并应返回 PDF 作为响应中的附件。我已经尝试过,但出现此错误TypeError: Object of type bytes is not JSON serializable

因此,我如何从第二个 API 中的第一个 API 返回文件响应

flask flask-sqlalchemy flask-restful

3
推荐指数
1
解决办法
9772
查看次数

将此sql转换为flask-sqlalchemy语法

我正在使用Flask-sqlalchemy.
这是mysql:

select u.id, count(i.id) as count from rss_urls as u left join rss_items as i on u.id = i.rss_urls_id group by u.id;
Run Code Online (Sandbox Code Playgroud)

我应该如何将其翻译成sqlalchemy?

非常感谢.

class RSS_urls(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    link = db.Column(db.String(200), unique=True)
    add_time = db.Column(db.DateTime)
    rss_items = db.relationship("RSS_items", backref="base_url", lazy="dynamic")


class RSS_items(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    rss_urls_id = db.Column(db.Integer, db.ForeignKey("RSS_urls.id"))
    link = db.Column(db.String(200))
    title = db.Column(db.String(200))
Run Code Online (Sandbox Code Playgroud)

这是模型.

python mysql sqlalchemy flask flask-sqlalchemy

2
推荐指数
1
解决办法
2433
查看次数

Flask - WTForm - 将表单保存到db

我有保存表单(wtf)到(sqlalchemy)db的问题,表单正在渲染,但提交后没有任何反应...

例如:

127.0.0.1 - - [30/Dec/2013 10:30:24] "POST /add/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

我试图在没有验证器的情况下保存

例如:

name = TextField('Task Name')
Run Code Online (Sandbox Code Playgroud)

我试图以其他方式保存表格:

if request.method == 'POST' and form.validate():
            new_task = Tasks(
                         form.name.data,
                         form.due_date.data,
                         form.priority.data,
                         form.posted_date.data,
                         session['user_id'],
                         form.category.data,
                         form.super_category.data,
                         form.description.data
                        )
            db.session.add(new_task)
            db.session.commit()  
Run Code Online (Sandbox Code Playgroud)

以下代码:

楷模 :

# -*- coding: utf-8; -*-

from app import db
import datetime


class Tasks(db.Model):

    __tablename__ = "tasks"

    task_id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(255),nullable=False)
    description = db.Column(db.Text,nullable=False)
    priority = db.Column(db.Integer,nullable=False)
    posted_date = db.Column(db.DATE,nullable=False)
    status = db.Column(db.Integer,default=1,nullable=False)
    category = db.Column(db.String(255),nullable=False)
    super_category …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

2
推荐指数
2
解决办法
7922
查看次数

使用Flask-SQLAlchemy填充数据库时为什么会出现UnmappedInstanceError?

我是SQLAlchemy的新手,我正在使用Flask-SQLAlchemy作为我当前的项目.我收到一个让我难过的错误:

sqlalchemy.orm.exc.UnmappedInstanceError: Class 'flask_sqlalchemy._BoundDeclarativeMeta' is not mapped; was a class (app.thing.Thing) supplied where an instance was required?
Run Code Online (Sandbox Code Playgroud)

我已经尝试改变实例中的符号,并移动一些东西.问题可能与这个问题或其他问题有关吗?

这是我的module(thing.py),其类继承自Flask-SQLAlchemy db.Model(如SQLAlchemy的Base类):

from app import db

class Thing(db.Model):
    indiv_id = db.Column(db.INTEGER, primary_key = True)
    stuff_1 = db.Column(db.INTEGER)
    stuff_2 = db.Column(db.INTEGER)
    some_stuff = db.Column(db.BLOB)

    def __init__():
        pass
Run Code Online (Sandbox Code Playgroud)

这是我在thing_wrangler.py模块中填充数据库的调用:

import thing
from app import db

def populate_database(number_to_add):
    for each_thing in range(number_to_add):
        a_thing = thing.Thing
        a_thing.stuff_1 = 1
        a_thing.stuff_2 = 2
        a_thing.some_stuff = [1,2,3,4,5]
        db.session.add(a_thing)
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy flask flask-sqlalchemy

2
推荐指数
1
解决办法
5761
查看次数

序列化具有多个子项的子项的SQLAlchemy对象

我有一个SLQALchemy对象,我正在使用marshmallow序列化.

该对象有N个赞和N个评论.它看起来像这样:

class Parent():

    __tablename__ = 'parent'

    title = Column(db.String(100), unique=True, nullable=False)
    description = Column(db.String(500))
    created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
    comments = relationship('Comment')
    likes = relationship('Like')
Run Code Online (Sandbox Code Playgroud)

序列化器看起来像这样:

class CommentSerializer(Serializer):
    class Meta:
        fields = ('id', 'text', 'created_at', 'parent_id')

class LikeSerializer(Serializer):
    class Meta:
        fields = ('id', 'created_at', 'parent_id')

class ParentSerializer(Serializer):
    comments = fields.Nested(CommentSerializer)
    likes = fields.Nested(LikeSerializer)

    class Meta:
        fields = ('id', 'title', 'description', 'comments', 'likes')
Run Code Online (Sandbox Code Playgroud)

我尝试在视图中运行它,如下所示:

allParents = Parent.query.all()
Run Code Online (Sandbox Code Playgroud)

并将其转换为JSON:

return jsonify({"parents": ParentSerializer(allParents, many=True).data})
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我收到一个错误list indices must be integers, …

python sqlalchemy flask flask-sqlalchemy marshmallow

2
推荐指数
1
解决办法
1737
查看次数

Flask应用程序获取Flask Migrate的"找不到烧瓶应用程序..... FLASK_APP环境变量"的错误

我有一个db_table.py看起来像这样的文件:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/mydb'

db = SQLAlchemy(app)
migrate = Migrate(app, db)
.....db tables....
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时:

flask db init
Run Code Online (Sandbox Code Playgroud)

我明白了:

错误:找不到Flask应用程序.您没有提供FLASK_APP环境变量.

我首先尝试手动设置FLASK_APP var,FLASK_APP然后set FLASK_APP=app.py再次运行,但这并没有解决问题.

我该如何解决这个问题?

谢谢

python database-migration flask flask-sqlalchemy

2
推荐指数
2
解决办法
6491
查看次数