我有一个模型文件(简化)
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'
如何修复我的模型?
完整的错误是:
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) 我有一个在 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
我对此有点陌生,所以如果有人可以帮助我,那就太棒了。
所以我在 SQLAlchemy 中为我正在开发的 Flask 应用程序设置了一些模型。我在构建应用程序时用一些假数据填充了数据库(当前是 SQLite),我有点惊讶我的一个调用有多慢。
我在数据库中有一个名为 Menu 的表。菜单有一个子项,部分,其中有一个子项。像这样:
我查询的对象是 1 Menu,它有 4 个部分,每个部分有 10 个项目。
在我的 Flask 路线中,我使用 Menu.query.get(id) 查询数据库并使用棉花糖将其序列化为 JSON。
整个事情需要 250 毫秒的时间才能在我的本地机器上返回。
所以我的问题是:我担心 250 毫秒是不是很愚蠢?速度慢的罪魁祸首是什么?- 糟糕的架构设计?- SQLite / 使用 SQL 数据库?- 还有什么?
任何帮助将不胜感激。
此外。我最初有 2 个更深的级别(项目有可以选择的选项),但是完成大约需要一整秒,所以当用户请求特定项目时,我将它们移动到单独的端点。
我已经使用 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 导入的东西,但似乎没有什么是正确的。
我是使用 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) 我想使用带有 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) 我想为客户端的 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 - 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) 我正在使用 Heroku 运行一个简单的 Flask 应用程序,我可以运行以下命令来创建所有表:
db.create_all()
Run Code Online (Sandbox Code Playgroud)
但是,我经常发布新内容,并且经常需要向现有表添加新列。是否有捷径可寻?
如果我需要使用 Postgres 手动创建一个新列,我将如何访问 Heroku 的 Postgres 数据库的 repl?
flask-sqlalchemy ×10
python ×8
flask ×4
sqlalchemy ×4
postgresql ×3
database ×1
heroku ×1
json ×1
marshmallow ×1
oracle11g ×1
peewee ×1
python-2.7 ×1
python-3.6 ×1
sql ×1