标签: flask-sqlalchemy

SQLAlchemy 中多对多查询非常慢

我有这个数据库,其中包含 3 个表、饼图、人员以及两者之间的连接点。一个馅饼可以由很多人制作,一个人可以制作很多馅饼,所以这是一个非常合法的用例。

我想要输出的是一个巨大的表,格式如下:

+-------------------------------------------------------
| person_id | person_name | pies
+-------------------------------------------------------
|     1     |    john     | apple, banana, plum, ..
|     2     |    mary     | apple, plum, pineapple, ..
|    ...    |     ...     | ..., ..., ..., ...
|   10000   |    josh     | banana, coconut, ...
Run Code Online (Sandbox Code Playgroud)

我目前正在实现这一目标如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import random
import time

app = Flask(__name__)
db = SQLAlchemy(app)

person_to_pie_association_table = db.Table(
    'person_to_pie_association_table',
    db.metadata,
    db.Column('pie_id', db.Integer, db.ForeignKey('pie.id')),
    db.Column('person_id', db.Integer, db.ForeignKey('person.id'))
)

class Person(db.Model): …
Run Code Online (Sandbox Code Playgroud)

sql sqlalchemy flask flask-sqlalchemy

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

如何在SqlAlchemy查询中跳过记录?

我的数据库中有 100 行。我正在尝试执行选择查询,但我想跳过前 10 行(即我想要 11-20 范围内的行)。

我怎样才能做到这一点?

python flask-sqlalchemy

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

SQLAlchemy 从 JSON 数据批量插入

我第一次尝试 ORM,试图了解它是如何工作的,但遇到了一些挑战:

我想做的是,将 API 中的 JSON 放入 SQLAlchemy 模型中,然后将所有条目批量插入到我的数据库中。但由于某种原因,我在 SQLAlchemy 中遇到错误。

根据我对错误的理解,在某个时间点,当将数据分配给我的模型时,它被转换为字典,而我认为它应该是class objects.

我的预期结果是成功插入所有条目。有人能帮我弄清楚我可能做错了什么吗?

欣赏。*

错误

sqlalchemy.exc.ProgrammingError:
(mysql.connector.errors.ProgrammingError) 
Failed processing pyformat-parameters;
Python 'dict' cannot be converted to a MySQL type
Run Code Online (Sandbox Code Playgroud)

JSON:

{
"all_orders": [
    {
    "id": 456215587,
    "created_at": "2018-11-04T23:18:18-02:00",
    "order_number": null,
    },
    {
    "id": null,
    "created_at": "2018-11-04T23:18:18-02:00",
    "order_number": 1982,
    }]
}
Run Code Online (Sandbox Code Playgroud)

功能

def update_orders(all_orders):

    cursor = db_cursor()
    session = db_session()
    orders_entries = []

    for orders in all_orders:

       order_id        = orders.get("id", {})
       order_number    = orders.get("order_number", {})
       created_at      = orders.get("created_at", …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

Flask sqlAlchemy 与 Flask_Marshmallow 的验证问题

使用flask_marshmallow进行输入验证,并使用scheme.load(),我无法捕获模型中@validates装饰器生成的错误

我捕获了资源中的结果和错误,但错误会直接发送给用户

==========模型.py==========

```python

from sqlalchemy.orm import validates

from sqlalchemy import Column, ForeignKey, Integer, String, DateTime
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.sql import func

from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
from sqlalchemy.orm import joinedload


db = SQLAlchemy()
ma = Marshmallow()

class Company(db.Model):

    __tablename__ = "company"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(250), nullable=False)
    addressLine1 = db.Column(db.String(250), nullable=False)
    addressLine2 = db.Column(db.String(250), nullable=True)
    city = db.Column(db.String(250), nullable=False)
    state = db.Column(db.String(250), nullable=False) …
Run Code Online (Sandbox Code Playgroud)

python exception flask-sqlalchemy marshmallow

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

使用 Celery Worker 与 SQLAlchemy DB 交互,包括从请求中了解用户

我对此做了很多研究,包括尝试这样的答案。看来 Celery 无法访问我的 Flask 应用程序的上下文。

我完全了解我的 celery 对象,它将装饰我的任务,必须能够访问我的 Flask 应用程序的上下文。我确实相信它应该,因为我按照指南创建了我的芹菜对象。我不确定混淆是否存在于我使用 Flask-HTTPAuth 的事实中。

这是我所拥有的一些内容。

def make_celery(app):
    celery = Celery(app.import_name, backend=app.config["CELERY_RESULT_BACKEND"], broker=app.config["CELERY_BROKER_URL"])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

app = Flask(__name__)
auth = HTTPBasicAuth()
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///flask_app.db"
app.config["CELERY_BROKER_URL"] = "redis://localhost:6379"
app.config["CELERY_RESULT_BACKEND"] = "redis://localhost:6379"
celery = make_celery(app)
db = SQLAlchemy(app)

@celery.task(bind=True, name="flask_app.item_loop")
def loop(self):
    items = g.user.items
    for item in items: …
Run Code Online (Sandbox Code Playgroud)

python celery flask flask-sqlalchemy flask-httpauth

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

AmbigeousForeignKeysError:无法确定关系 User.posts 上父/子表之间的联接条件 - 多个外键路径

如何实现用户对帖子点赞功能?我遵循了其他在线用户发布的代码;但是,我收到以下错误:

AmbiguousForeignKeysError: 
Could not determine join condition between parent/child tables on relationship 
User.posts - there are multiple foreign key paths linking the tables.  Specify 
the 'foreign_keys' argument, providing a list of those columns which should be 
counted as containing
Run Code Online (Sandbox Code Playgroud)
class User(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   username = db.Column(db.String(20), unique=True, nullable=False)
   email = db.Column(db.String(120), unique=True, nullable=False)
   image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
   password = db.Column(db.String(60), nullable=False) 
   posts = db.relationship('Post', backref='author', lazy=True)

   def __repr__(self):
       return "{}, {}, {}".format(self.username, self.email, self.image_file)

   liked = db.relationship( …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

sqlalchemy 外键找不到表

I\xe2\x80\x99m 使用 sqlalchemy 制作数据库,该数据库由三个类组成:User、Meeting、MeetingRoom\n我想在 Meeting 中为会议室创建外键,但由于某种原因,它给出以下错误

\n\n
\n

sqlalchemy.exc.NoReferencedTableError:与列“meeting.mrid”关联的外键找不到用于生成目标列“mrid”外键的表“meetingroom”

\n
\n\n

错误截图

\n\n

当我们以相反的方式执行此操作(在会议室中添加会议外键)时,它可以工作,我\xe2\x80\x99m 不确定问题是什么\xe2\x80\x99s\n这是代码:

\n\n
from flask import Flask, request, jsonify\nfrom flask_sqlalchemy import SQLAlchemy\nfrom flask_marshmallow import Marshmallow\nimport os\n# ==================================\napp = Flask(__name__)\nbasedir = os.path.abspath(os.path.dirname(__file__))\napp.config[\'SQLALCHEMY_DATABASE_URI\'] = \'sqlite:///db.db\'\napp.config[\'SQLALCHEMY_TRACK_MODIFICATION\'] = False\ndb = SQLAlchemy(app)\nma = Marshmallow(app)\n# ====================DATABASE\n# =============USER\nclass User (db.Model):\n id = db.Column(db.Integer,primary_key=True)\n name = db.Column(db.String(30))\n Email = db.Column(db.String(30))\n Pass = db.Column(db.String(30))\n Phone = db.Column(db.String(12))\n Department = db.Column(db.String(30))\n Major = db.Column(db.String(30))\n meeting = db.relationship(\'Meeting\', backref=\'creator\')\n meetingroom = db.relationship(\'MeetingRoom\', backref=\'reserver\')\n\n def __init__(self, name, Email, Pass, Phone, …
Run Code Online (Sandbox Code Playgroud)

python database sqlite sqlalchemy flask-sqlalchemy

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

将 pandas 数据帧转换为 Json 对象数组

我正在使用 Flask 和 Angular 构建一个机器学习应用程序。我正在我的 pyhton 后端检索一个 mysql 表,我想使用 pandas dataframe 进行一些过滤方法。我通过将 Json 数组转换为 pandas 数据帧轻松完成了这部分。但是当我尝试通过将数据帧转换为 json 对象数组来返回数据帧时,它将如下所示。

from flask import request
from flask_restful import Resource
from Model import db, EmployeeTaskSummary, EmployeeTaskSummarySchema
import json

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

employee_task_summary_schemas = EmployeeTaskSummarySchema(many=True)
employee_task_summary_schema = EmployeeTaskSummarySchema()

class EmployeeTaskSummaryResource(Resource):
    def get(self):
       employee_task_summary = EmployeeTaskSummary.query.all()
       employee_task_summary = 
       employee_task_summary_schemas.dump(employee_task_summary).data
       df=pd.DataFrame(employee_task_summary)
       return df.head(5).to_json(orient='records')
Run Code Online (Sandbox Code Playgroud)

那么输出 json Arry 将是:-

"[{\"closed_issues\":0,\"created_issues\":0,\"designation\":\"STL\",\"gitlab_additions\":0,\"gitlab_deletions\":0,\"inprogress_issues\":0,\"month\":1,\"name\":\"Madawa Jeev.\",\"onhold_issues\":0,\"open_issues\":0,\"project_name\":\"DSN\",\"re_opened_issues\":0,\"resolved_issues\":0,\"timelogs\":0,\"week\":1,\"year\":2019},{\"closed_issues\":0,\"created_issues\":0,\"designation\":\"STL\",\"gitlab_additions\":0,\"gitlab_deletions\":0,\"inprogress_issues\":0,\"month\":1,\"name\":\"Madawa Jeev.\",\"onhold_issues\":0,\"open_issues\":0,\"project_name\":\"DSN\",\"re_opened_issues\":0,\"resolved_issues\":0,\"timelogs\":0,\"week\":2,\"year\":2019},{\"closed_issues\":0,\"created_issues\":0,\"designation\":\"STL\",\"gitlab_additions\":0,\"gitlab_deletions\":0,\"inprogress_issues\":0,\"month\":1,\"name\":\"Madawa Jeev.\",\"onhold_issues\":0,\"open_issues\":7,\"project_name\":\"DSN\",\"re_opened_issues\":0,\"resolved_issues\":0,\"timelogs\":0,\"week\":3,\"year\":2019},{\"closed_issues\":0,\"created_issues\":0,\"designation\":\"STL\",\"gitlab_additions\":0,\"gitlab_deletions\":0,\"inprogress_issues\":0,\"month\":1,\"name\":\"Madawa Jeev.\",\"onhold_issues\":0,\"open_issues\":0,\"project_name\":\"DSN\",\"re_opened_issues\":0,\"resolved_issues\":0,\"timelogs\":0,\"week\":4,\"year\":2019},{\"closed_issues\":0,\"created_issues\":0,\"designation\":\"STL\",\"gitlab_additions\":0,\"gitlab_deletions\":0,\"inprogress_issues\":0,\"month\":1,\"name\":\"Madawa Jeev.\",\"onhold_issues\":0,\"open_issues\":18,\"project_name\":\"DSN\",\"re_opened_issues\":0,\"resolved_issues\":0,\"timelogs\":0,\"week\":5,\"year\":2019}]"
Run Code Online (Sandbox Code Playgroud)

我不明白输出中出现这个“\”符号。我需要这种输出。(这是随机样本) …

json dataframe flask pandas flask-sqlalchemy

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

如何正确设置 Flask + uWSGI + SQLAlchemy 以避免数据库连接问题

我正在使用带有 SQLAlchemy 的 Flask 应用程序和 uWSGI 服务器。一个已知问题是,uWSGI 在分叉期间通过所有进程重复连接。有关如何解决此问题的信息在网络上有点分散,但两个主要选项似乎是:

  • 在uWSGI的配置中使用lazy-apps = true(不推荐,因为它消耗大量内存)
  • 使用 uWSGI 的@postfork装饰器在分叉后关闭连接,为每个新进程启动新的连接,但我不清楚何时以及如何在 Flask 应用程序中使用。

这是我的应用程序的示例:

# file: my_app/app.py

db = SQLAlchemy()


def create_app():
    app = Flask(__name__)
    app.config.from_pyfile(f'../config/settings.py')
    db.init_app(app)
    db.create_all(app=app)
    return app
Run Code Online (Sandbox Code Playgroud)

run.py文件示例:

# file: run.py
from my_app/app import create_app


app = create_app()
if "__main__" == __name__:
    app.run(debug=app.config["DEBUG"], port=5000)
Run Code Online (Sandbox Code Playgroud)

所以问题是 postfork 应该在哪里以及如何执行来正确设置 uWSGI 的服务器以在每个进程上使用隔离连接而不使用lazy-apps = true

flask uwsgi flask-sqlalchemy

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

使用 Postman 将 JSON 请求对象中的 Date 对象设置到服务器

我有一个想要测试的网络服务。我正在 Postman 的帮助下检查它。当我必须在 JSON 中设置日期对象时,我遇到了问题。

这是我的用户类: PS:我正在使用 Flask-sqlalchemy 来创建数据库模型。

class User(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    name = db.Column('name', db.String(60), nullable=True, default=None)
    username = db.Column('user_name', db.String(100), nullable=False, unique=True)
    dob = db.Column('date_of_birth', db.Date, nullable=True, default=None)
Run Code Online (Sandbox Code Playgroud)

这是我试图发布到“注册”路由的 JSON 数据 -http://127.0.0.1:5000/register

{
    "name": "Catherin Francisco",
    "username": "c_francisco",
    "dob": new Date("1988-06-27")
}
Run Code Online (Sandbox Code Playgroud)

400 Bad Request: Failed to decode JSON object我在设置“dob”键值对时遇到问题。谁能帮我设置 JSON 中的日期对象。

json date flask-sqlalchemy postman

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