标签: flask-sqlalchemy

声明图像字段的正确方法,sqlalchemy

我正在尝试使用flask构建和应用程序,我看过一些教程和书籍以及一些代码[1],它们解释了如何为数据库设置声明整数和字符串。但是,它们没有解释如何存储图像。我现在很困惑,虽然存储图像的自然方式是在数据库中,但是阅读flask站点[2]上的一些文档,文件系统是存储图像的地方。我只是在阅读 Flask 开发书籍时做出第一个假设,即使用 largeBinary 的声明将是正确的,但这只是我的猜测,正如您在下面的代码中所见。有人可以帮我解决这个问题吗?如果我问的不清楚,请告诉我。

Class User(Base):
    __table__ = 'user'

    id = Column(Integer, primary_key = True)
    name  Column(String(80), nullable=False)
    email =  Column(String(250), nullable=False)
    image = Column(LargeBinary, nullable = True)
Run Code Online (Sandbox Code Playgroud)

[1] https://github.com/lobrown/Full-Stack-Foundations/blob/master/Lesson_1/database_setup.py [2] http://flask.pocoo.org/docs/0.10/patterns/fileuploads/

python sqlite flask-sqlalchemy

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

如何使用 SqlAlchemy 在 Postgres 中查询 JSON 数组?

我定义了一个 SqlAlchemy 模型

from sqlalchemy.dialects.postgresql import JSONB

class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(255), nullable=False)
    city = db.Column(db.String(255))
    contact_list = db.Column(JSONB)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

def add_user():
    user = User(nickname="Mike")
    user.contact_list = [{"name": "Sam", "phone": ["123456", "654321"]}, 
                         {"name": "John", "phone": ["159753"]},
                         {"name": "Joe", "phone": ["147889", "98741"]}]
    db.session.add(user)
    db.session.commit()

if __name__ == "__main__":
    add_user()
Run Code Online (Sandbox Code Playgroud)

如何使用电话从我的contact_list 中检索姓名?例如,我有147889,我如何检索Joe

我试过这个

User.query.filter(User.contact_list.contains({"phone": ["147889"]})).all()

但是,它返回给我一个空列表, []

我怎样才能做到这一点?

sqlalchemy flask-sqlalchemy

11
推荐指数
1
解决办法
9223
查看次数

SQLAlchemy查询,按关系加入关系和顺序

我有两个SQLAlchemy模型设置如下:

##############
# Post Model #
##############
class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(250))
    content = db.Column(db.String(5000))
    timestamp = db.Column(db.Integer)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    likes = db.relationship('Like', backref = 'post', lazy = 'dynamic')

###############
# Likes Model #
###############
class Like(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    voter_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这些帖子上有帖子模型和用户喜欢的模型.我想创建一个选择所有帖子的查询,按照帖子的喜欢数量排序.在shell中,我可以运行:

SELECT post.*, 
       count(like.id) AS num_likes
FROM post
LEFT JOIN like
ON post.id = like.post_id
GROUP BY post.id;
Run Code Online (Sandbox Code Playgroud)

什么是等效的SQLAlchemy命令?

谢谢!

python sqlalchemy flask flask-sqlalchemy

10
推荐指数
1
解决办法
6666
查看次数

如何通过SQLAlchemy在现有表列上添加外键约束?

我正在使用Flask,Alembic和PostgreSQL与SQLAlchemy.我有location_messages一个列的现有表campaign_id.这是最初在模型中使用代码创建的

campaign_id = db.Column(db.Integer)
Run Code Online (Sandbox Code Playgroud)

我想为它添加一个外键,所以我更新了模型

campaign_id = db.Column(db.Integer, db.ForeignKey('campaigns.id'))
Run Code Online (Sandbox Code Playgroud)

我跑了revision --autogenerate但它没有创建任何东西 - 所以我一直在查看文档,但我不能理解我的用法语法.对于它的价值,在Alembic中从头开始创建表(放下它之后)是

op.create_table('location_messages',
[...]
sa.Column('campaign_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['campaign_id'], ['campaigns.id'], ),
sa.PrimaryKeyConstraint('id')
)
Run Code Online (Sandbox Code Playgroud)

但对于我的生活,我找不到一种方法来为现有的桌子做这件事.有没有办法获取表的实例并将其分配ForeignKeyConstraint给列?

python sqlalchemy flask flask-sqlalchemy alembic

10
推荐指数
1
解决办法
8767
查看次数

如何删除与 SQLAlchemy 的一对一关系

我想创建一个可为空的自引用关系,可以使用 SQLAlchemy 删除该关系。示例模型如下(注意,使用Flask-SQLAlchemy):

class Person(db.Model):

    __tablename__ = 'person'

    id          = db.Column(db.Integer, primary_key=True)
    partner_id  = db.Column(db.Integer, db.ForeignKey('person.id'), nullable=True)
    partner     = db.relationship('Person', uselist=False)
Run Code Online (Sandbox Code Playgroud)

因此,可以将其想象为一桌只有一个搭档的警察,但该搭档可能原来一直是黑手党的成员,因此他们暂时失去了搭档。没有伴侣的警察很好,至少在数据库方面是这样——但我认为在整个演出过程中,他们没有伴侣的状态意味着大量的财产损失。

不用说,这个问题:sqlalchemy:带有声明性的一对一关系讨论了如何建立这种关系。问题是如何解除这种关系?通常,使用不同的外键,您可以按如下方式执行此操作:

joe.partner.remove(larry)
Run Code Online (Sandbox Code Playgroud)

其中joelarry都是Person对象。然而,经过uselist论证,joe.partner现在其实是一个Person没有remove办法的事情。

python sqlalchemy flask-sqlalchemy

10
推荐指数
1
解决办法
2769
查看次数

SQLAlchemy:在连接查询中使用删除/更新

使用 Flask-SQLAlchemy,我想Questions根据另一个表的值删除表中的行,该表链接到表Topic,然后Subject用外键链接到表。我试过这个查询:

db.session.query(Questions).join(Topic)join(Subject).filter(Subject.account_id==current_user.id).delete()
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误:

InvalidRequestError: Can't call Query.update() or Query.delete() when join(), outerjoin(), select_from(), or from_self() has been called
Run Code Online (Sandbox Code Playgroud)

所以从这个我想我不能用.delete().join()

这个问题有解决方法吗?谢谢。

python database sqlalchemy flask flask-sqlalchemy

10
推荐指数
1
解决办法
6620
查看次数

sqlalchemy的Flask应用程序上下文

我正在研究烧瓶中的小休息api.Api具有注册请求并生成单独线程以在后台运行的路由.这是代码:

def dostuff(scriptname):
    new_thread = threading.Thread(target=executescript,args=(scriptname,))
    new_thread.start()
Run Code Online (Sandbox Code Playgroud)

线程启动但是当我尝试从executioncript函数插入db时它会出错.它抱怨db对象没有在应用程序中注册.

我正在动态创建我的应用程序(使用api作为Blueprint).

这是应用程序的结构

-run.py ## runner script
-config
   -development.py
   -prod.py
-app
  -__init__.py
  - auth.py
  - api_v1
     - __init__.py
     - routes.py
     - models.py
Run Code Online (Sandbox Code Playgroud)

这是我的跑步者脚本run.py:

from app import create_app, db

if __name__ == '__main__':
    app = create_app(os.environ.get('FLASK_CONFIG', 'development'))
    with app.app_context():
        db.create_all()
    app.run()
Run Code Online (Sandbox Code Playgroud)

以下是app/__init__.py创建应用程序的代码:

from flask import Flask, jsonify, g
from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app(config_name):
    """Create an application instance."""
    app = Flask(__name__)

    # apply configuration
    cfg = os.path.join(os.getcwd(), …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-restful

10
推荐指数
1
解决办法
4477
查看次数

我可以检查sqlalchemy查询对象以查找已连接的表吗?

我正在尝试以编程方式构建搜索查询,为此,我正在加入一个表.

class User(db.Model):
    id = db.Column(db.Integer(), primary_key=True)

class Tag(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    title = db.Column(db.String(128))
    description = db.Column(db.String(128))
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子 - 我希望它有意义.

说我的搜索功能看起来像:

def search(title_arg, desc_arg):
    query = User.query
    if title_arg:
        query = query.join(Tag)
        query = query.filter(Tag.title.contains(title_arg))
    if desc_arg:
        query = query.join(Tag)
        query = query.filter(Tag.description.contains(desc_arg))

    return query
Run Code Online (Sandbox Code Playgroud)

以前,我一直跟踪已经在列表中加入的表,如果表在列表中,假设它已经加入,只需添加过滤器.

如果我可以查看查询对象,看看它Tag已经加入了,那就太酷了,如果是的话就跳过它.我有一些更复杂的查询构建,真正从中受益.

如果对于我错过的搜索构建查询的策略完全不同,那也会很棒.或者,如果上面的代码没问题,如果我两次加入表格,这也是很好的信息.任何帮助都非常感激!!!

python join sqlalchemy flask-sqlalchemy

10
推荐指数
3
解决办法
1963
查看次数

flask_sqlalchemy:`__setattr__` 到 `DefaultMeta` 的错误

重新构建 Docker 映像后,我开始收到以下错误:

$ docker run --rm -it python:3.8-slim /bin/bash
...
$ pip install flask_sqlalchemy
...
$ python -c "from flask_sqlalchemy import SQLAlchemy; SQLAlchemy()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 715, in __init__
    self.Model = self.make_declarative_base(model_class, metadata)
  File "/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 797, in make_declarative_base
    model.query_class = self.Query
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/ext/declarative/api.py", line 79, in __setattr__
    _add_attribute(cls, key, value)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 802, in _add_attribute
    type.__setattr__(cls, key, value)
TypeError: can't apply this __setattr__ to DefaultMeta object …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

10
推荐指数
1
解决办法
845
查看次数

正确的 sqlalchemy 代码的 pycharm 语法错误?

我收到以下语句的语法错误,问题部分是(Player.name == data["name"]) | (Player.account == data["account"]))

player_from_db = db.session.execute(
    select(Player).where(
             (Player.name == data["name"]) | 
             (Player.account == data["account"])
    )).scalar()
Run Code Online (Sandbox Code Playgroud)

这是错误:

预期类型 'Union[ColumnElement[bool], _HasClauseElement, SQLCoreOperations[bool], ExpressionElementRole[bool], () -> ColumnElement[bool], LambdaElement]',却得到 'Union[bool, int]'

但该子句显然有两个 bool 表达式。帮助表示感谢!

python sqlalchemy pycharm python-3.x flask-sqlalchemy

10
推荐指数
0
解决办法
2934
查看次数