标签: flask-sqlalchemy

由于一个或多个映射器初始化失败,无法在 SQLAlchemy 中创建记录

我有一个模型文件(简化)

Repos 有一个用户,用户可以有多个 repos。

class Repo(Base):
    __tablename__ = "repos"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(512), unique=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = db.relationship("User", back_populates="users")

class User(Base):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200), unique=True)
    repos = db.relationship("User", back_populates="repos")
Run Code Online (Sandbox Code Playgroud)

当我尝试插入记录时,出现错误:

一个或多个映射器未能初始化 - 无法继续初始化其他映射器。原始异常是:映射器'Mapper|User|users' 没有属性'users'

如何修复我的模型?

python sql sqlalchemy flask-sqlalchemy

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

element.py 中的 SQLAlchemy 错误 - ColumnClause 或 Comparator 都有“描述”

完整的错误是:

AttributeError: Neither 'ColumnClause' object nor 'Comparator' object
has an attribute 'description' 
Run Code Online (Sandbox Code Playgroud)

发生在 __ repr __ 中的 sqlalchemy\sql\elements.py 中的第 544 行

在 __ getattr__ 中的 sqlalchemy\sql\elements.py 中的第 735 行

我最初发现了这个问题,因为我的烧瓶模板(它遍历 ormobject.__ dict__以将数据输出到表中)没有显示特定的行。

深入python控制台并导入模块后,我通过尝试打印对象的属性来产生此错误。

from app.models import Parcel
o = Parcel.query.get(1)
o.parcelid #string field prints the correct value, no problem
o.yrbuilt #integer field, same, no problem
o.streetnum #string field, throws above error
Run Code Online (Sandbox Code Playgroud)

我的模型(db 变量是SQLAlchemy(app)):

class Parcel(db.Model):
    """
    the county parcel data
    """
    __tablename__ = 'parcel'
    __table_args__ = …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

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

在 Sqlalchemy 中更新多列

我有一个在 Flask 上运行并使用 sqlalchemy 与数据库交互的应用程序。我想用用户指定的值更新表的列。我正在使用的查询是

def update_table(value1, value2, value3):
     query = update(Table).where(Table.column1 == value1).values(Table.column2 = value2, Table.column3 = value3)
Run Code Online (Sandbox Code Playgroud)

我不确定我传递值的方式是否正确。还有 Table.column2/3 i=gives error say Can't assign to function call。column2/3 不是函数,它们是字段名称。那么,如何更新多个值以及为什么会在此处出错?

PS:我参考了sqlalchemy doc

python sqlalchemy python-2.7 flask-sqlalchemy

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

SQLAlchemy-Marshmallow 查询和序列化为 JSON 的速度很慢

我对此有点陌生,所以如果有人可以帮助我,那就太棒了。

所以我在 SQLAlchemy 中为我正在开发的 Flask 应用程序设置了一些模型。我在构建应用程序时用一些假数据填充了数据库(当前是 SQLite),我有点惊讶我的一个调用有多慢。

我在数据库中有一个名为 Menu 的表。菜单有一个子项,部分,其中有一个子项。像这样:

  • 菜单
    • 部分
      • 项目

我查询的对象是 1 Menu,它有 4 个部分,每个部分有 10 个项目。

在我的 Flask 路线中,我使用 Menu.query.get(id) 查询数据库并使用棉花糖将其序列化为 JSON。

整个事情需要 250 毫秒的时间才能在我的本地机器上返回。

所以我的问题是:我担心 250 毫秒是不是很愚蠢?速度慢的罪魁祸首是什么?- 糟糕的架构设计?- SQLite / 使用 SQL 数据库?- 还有什么?

任何帮助将不胜感激。

此外。我最初有 2 个更深的级别(项目有可以选择的选项),但是完成大约需要一整秒,所以当用户请求特定项目时,我将它们移动到单独的端点。

python json sqlalchemy flask-sqlalchemy marshmallow

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

SQLAlchemy 中 peewee 的DoesNotExist 的等价物是什么?

我已经使用 peewee 和 SQLite 有一段时间了,现在我正在使用 Postgres 切换到 SQLAlchemy,但我找不到等效的 DoesNotExist(参见示例)

try:
    return models.User.get(models.User.id == userid)
except models.DoesNotExist:
    return None
Run Code Online (Sandbox Code Playgroud)

您知道如何使用 SQLAlchemy 实现相同的目标吗?我已经检查了可以从 sqlalchemy.ext 导入的东西,但似乎没有什么是正确的。

python postgresql flask-sqlalchemy peewee

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

如何使用flask和sqlalchemy进行选择查询?

我是使用 Flask 和 SQLAlchemy 的新手,我在 postgress 中有一个数据库,这个数据库有表“数据”200 条记录,我想做一个 Select 语句但是当我这样做时总是给我同样的错误,这是我的代码:

这是我的model.py

from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Data(Base):
    __tablename__ = 'data'
    ids = Column(Integer(), primary_key=True)
    customer_id = Column(String())
    inventory_id = Column(String())
    device_id = Column(String())

    def toJSON(self):       
        json = {
            "ids":self.ids,
            "customer_id":self.customer_id,
            "inventory_id":self.inventory_id,
            "device_id":self.device_id,     
        }

        return json
Run Code Online (Sandbox Code Playgroud)

这是我的烧瓶应用程序:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask, render_template, request
from flask_cors import CORS, cross_origin …
Run Code Online (Sandbox Code Playgroud)

python postgresql flask flask-sqlalchemy

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

Flask-sqalchemy 和 oracle 数据库 ID 不自动递增

我想使用带有 SQLAlchemy 模块的 Python 和 Flask 框架在我的数据库(Oracle 11g,但 Ubuntu 16.04 的 Express Edition)中创建一个新表。表的第一个字段和 ID 是一个整数字段,我希望它自动递增,但 Oracle 数据库不支持自动递增。我有一个添加新评论的表单,但是当我尝试添加新记录时,它报告了一个错误:

sqlalchemy.exc.IntegrityError: (cx_Oracle.IntegrityError) ORA-01400: 无法将 NULL 插入 ("WIKTOR"."TBL_COMMENTARIOS"."ID") [SQL: 'INSERT INTO tbl_comentarios (usuario, comentario, fecha) VALUES (:usuario , :comentario, :fecha) 返回 tbl_comentarios.id INTO :ret_0'] [参数: {'usuario': 'wiktor', 'comentario': 'hola', 'fecha': datetime.datetime(2017, 5, 24, 11, 23, 45, 39450), 'ret_0': }]

基本上它说 ID 不能为空,这是因为表单中没有字段可以添加它,所以它发送 id 为空,然后数据库模型的自动增量不起作用。这是代码:

db = SQLAlchemy()

class Comentarios(db.Model):
    __tablename__ = 'tbl_comentarios'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    usuario = db.Column(db.String(50))
    comentario = db.Column(db.Text())
    fecha …
Run Code Online (Sandbox Code Playgroud)

python database oracle11g flask flask-sqlalchemy

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

为什么我在 Flask 中得到 'InstrumentedList' 对象没有属性 'paginate' filter_by?

我想为客户端的 subscribed_users 分页,但我收到一条错误消息:

cl = Client.query.filter_by(family='John').first()
cl.subscribed_users.paginate()
Run Code Online (Sandbox Code Playgroud)

AttributeError: 'InstrumentedList' object has no attribute 'paginate'

这是我的models.py

subscribers = db.Table(
    'clients_subscribed',
    db.Column('client_id', db.Integer, db.ForeignKey('client.id', ondelete='CASCADE')),
    db.Column('user_id', db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'))
)

class Client(db.Model):
    subscribed_users = db.relationship(
        'User',
        secondary=subscribers,
        backref=db.backref('user', passive_deletes=True, lazy='dynamic')
    )
Run Code Online (Sandbox Code Playgroud)

flask flask-sqlalchemy

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

使用 SqlAlchemy 和 PostgreSQL 找不到外键

我刚刚开始了一个 Flask - SqlAlchemy 项目,并且在使用外键时遇到了一些问题。

我有表 User 和 Portfolio。投资组合有一个用户的外键,使用用户名。我这样设置我的模型。

class User(db.Model):
  __tablename__ = 'portfolio_users'
  __table_args__ = {"schema":"keldan"}
  username = Column(String(), primary_key=True)
  date_added = Column(DateTime())

class Portfolio(db.Model):
  __tablename__ = 'portfolios'
  __table_args__ = {"schema":"keldan"}
  id = Column('pid', Integer(), Sequence('portfolios_pid_seq'), primary_key=True)
  date_added = Column(DateTime())
  name = Column(String())
  username = Column(String(), ForeignKey('portfolio_users.username'))
  user = relationship('User', backref=backref('portfolios', cascade='save-update, merge, delete, delete-orphan'))
Run Code Online (Sandbox Code Playgroud)

当我尝试运行一个简单的全选查询时出现的错误是:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'portfolios.username' could not find table 'portfolio_users' with which to generate a foreign key to target column 'username' …
Run Code Online (Sandbox Code Playgroud)

postgresql flask-sqlalchemy python-3.6

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

如何使用flask-sqlalchemy更新Postgres架构?

我正在使用 Heroku 运行一个简单的 Flask 应用程序,我可以运行以下命令来创建所有表:

db.create_all()
Run Code Online (Sandbox Code Playgroud)

但是,我经常发布新内容,并且经常需要向现有表添加新列。是否有捷径可寻?

如果我需要使用 Postgres 手动创建一个新列,我将如何访问 Heroku 的 Postgres 数据库的 repl?

python heroku flask flask-sqlalchemy heroku-postgres

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