相关疑难解决方法(0)

如何将SqlAlchemy结果序列化为JSON?

Django有一些从DB到JSON格式返回的ORM模型的自动序列化.

如何将SQLAlchemy查询结果序列化为JSON格式?

我试过,jsonpickle.encode但它编码查询对象本身.我试过了,json.dumps(items)但它回来了

TypeError: <Product('3', 'some name', 'some desc')> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

是否真的很难将SQLAlchemy ORM对象序列化为JSON/XML?它没有默认的序列化器吗?现在序列化ORM查询结果是非常常见的任务.

我需要的只是返回SQLAlchemy查询结果的JSON或XML数据表示.

需要在javascript datagird中使用SQLAlchemy对象的JSON/XML格式的查询结果(JQGrid http://www.trirand.com/blog/)

python json sqlalchemy

169
推荐指数
9
解决办法
14万
查看次数

SQLAlchemy ORM转换为pandas DataFrame

这个主题暂时没有在这里或其他地方得到解决.有没有将SQLAlchemy <Query object>转换为pandas DataFrame 的解决方案?

Pandas有能力使用,pandas.read_sql但这需要使用原始SQL.我有两个理由想要避免它:1)我已经拥有使用ORM的一切(这本身就是一个很好的理由)和2)我使用python列表作为查询的一部分(例如:我的模型类.db.session.query(Item).filter(Item.symbol.in_(add_symbols)在哪里Item并且add_symbols是一个列表).这相当于SQL SELECT ... from ... WHERE ... IN.

有可能吗?

python sqlalchemy pandas flask-sqlalchemy

92
推荐指数
6
解决办法
4万
查看次数

SQLAlchemy返回元组而不是字典

我已经将SQLAlchemy更新为0.6,但它打破了一切.我注意到它不再返回字典而不是字典了.这是一个示例查询:

query = session.query(User.id, User.username, User.email).filter(and_(User.id == id, User.username == username)).limit(1)
result = session.execute(query).fetchone()
Run Code Online (Sandbox Code Playgroud)

这段代码用于返回0.5中的字典.

我的问题是如何归还字典?

python sqlalchemy

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

将sqlalchemy查询结果转换为dicts列表

我想将我的查询结果转换为这样的dicts列表:

result_dict = [{'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic'}, {'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}]
Run Code Online (Sandbox Code Playgroud)

但相反,我把它作为一个字典,因此重复键:

result_dict = {'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic', 'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}
Run Code Online (Sandbox Code Playgroud)

我通过这样做得到这个结果:

for u in my_query.all():
     result_dict = u.__dict__
Run Code Online (Sandbox Code Playgroud)

如何将sqlAlchemy查询结果转换为dicts列表(每行都是dict)?

请帮忙

python sqlalchemy

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

SQLAlchemy RowProxy 到字典

如何将 sqlalchemy.engine.result.RowProxy 转换为字典?

row = db.engine.execute(sql, id=id).fetchone()
Run Code Online (Sandbox Code Playgroud)

尝试从 SO问题使用这个:

for c in inspect(obj).mapper.column_attrs:
    model_col = getattr(obj, c.key)
    model_dict[c.key] = model_col
Run Code Online (Sandbox Code Playgroud)

错误:

sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type <class 'sqlalchemy.engine.result.RowProxy'>
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

5
推荐指数
0
解决办法
6102
查看次数

如何将SQLAlchemy结果行转换为嵌套字典

我正在评估在异步/等待FastAPI应用程序中使用SQLAlchemy的潜在设置。目前,我正在使用declarative_base类编写模型和查询,然后使用数据库执行查询(对于模型类,语法更易读易写;直​​接使用SQLAlchemy核心表不是我的最爱活动)。这一切都很好。

在这一点上,我有SQLAlchemy结果行,但是我需要将它们转换为通用dict,由于急切加载的关系而可能嵌套(仅在此环境中支持类型)。我不能使用SQLAlchemy的ORM,因为1)我没有engineor session;2)ORM假定只要需要将其加载到对象中就可以访问数据库,而在异步/等待FastAPI应用程序中则不是这种情况。

是否有人对如何实现这一目标有想法或指示?我正在努力弄清楚如何将结果行与特定的关系键相关联。我一直在研究SQLAlchemy的内部思想,但是它很不透明,因为其中很多都假设我的设置中没有出现整个对象缓存和会话/引擎管理层。

我可以使用以下两点想法:

  1. 如何将列名称映射table_1_column_name到特定模型及其属性
  2. 如何检测和映射关系(可能超过一个层次)

感谢您的任何帮助,您可以提供!

更新:您可以在此处找到一个可运行的示例:https : //gist.github.com/onecrayon/dd4803a5099061fa48d52f2d4bc2396b(有关位置,请参见第92-109行,我需要弄清楚如何通过映射将RowProxy转换为嵌套字典查询列名称到SQLAlchemy模型上的名称)。

python sqlalchemy async-await fastapi

5
推荐指数
1
解决办法
199
查看次数

SQLAlchemy 方法将 ORM 对象获取为 dict?

采取以下代码:

from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
engine = create_engine('postgresql://postgres:password@localhost:5432/db', echo=True, echo_pool='debug')
Base = declarative_base()

class Item(Base):
    __tablename__ = 'items'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    def __repr__(self):
       return "<Item(id=%s, name='%s')>" % (self.id, self.name)

item = Item(name="computer")
Run Code Online (Sandbox Code Playgroud)

Item有没有办法获得包含所有字段的 python 字典?例如,我想返回以下内容:

item.to_dict()
{"id": None, "name": "computer"}
Run Code Online (Sandbox Code Playgroud)

或者我必须编写自己的方法来做到这一点?

python sqlalchemy

4
推荐指数
1
解决办法
7583
查看次数

使用sqlalchemy检查行和返回id的存在是否缓慢

所有,

我正在读一个csv文件并使用sqlalchemy将数据添加到MySQL数据库.其中一个表是地址表,它只能保存唯一的地址.这些地址与另一个具有地址id的外键字段的"语句"表之间存在关系.

因此,对于我的数据文件中的每一行,我创建一个新的语句obj,然后获取相关地址的id.如果地址已存在,则返回该id.否则,我创建一个新的地址obj并返回该id.这是使用下面的代码完成的,改编自这个SO问题.

def get_or_create(self, model, rec):
    instance = self.session.query(model).filter_by(**dict(filter(lambda (x,y): x in model.__dict__.keys(), rec.iteritems()))).first()
    if instance:
        return instance
    else:
        instance = model(rec)
        return instance
Run Code Online (Sandbox Code Playgroud)

我正在使用GUID作为我的id字段,它是地址表的主键的一部分:

class address(Base):
    __tablename__ = 'address'
    id = id_column()
    name               = Column(String(75), primary_key=True)
    Address_Line_One   = Column(String(50), primary_key=True)
    Address_Line_Two   = Column(String(50), primary_key=True)
    Address_Line_Three = Column(String(50), primary_key=True)
    Address_Line_Four  = Column(String(50), primary_key=True)
Run Code Online (Sandbox Code Playgroud)

id_column()来自这里,虽然它已被转换为CHAR(32)由于限制别处.最后,这里有一个片段:

currStatement   = statements(rec, id=currGUID)
currStatement.address = self.get_or_create(address, rec)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,除非它很慢.对于在一个事务中插入的~65,000个语句,我看到干净测试DB上的1.5小时插入时间.实时观察插入显示它快速达到~10,000行,然后插入速度开始下降.

我该怎么做才能加快插入时间?

编辑:

经过进一步测试,我发现插入时间慢是因为每个对象都是单独插入的.所以,我有~65,000行,每行都有几个sqlalchemy对象,单独插入.使用sqlalchemy 0.7,我如何批量插入对象?

mysql bulkinsert sqlalchemy insert-update

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

如何在 SQLAlchemy 模型中获取列和值字典?

我有下表:

Base = declarative_base()
metadata = Base.metadata

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String(255))
    email = Column(String(255))
Run Code Online (Sandbox Code Playgroud)

是否有可能获得一个字典,对于空记录将返回如下内容:

{'id': None, 'username': None, 'email': None}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

user = User()
user.username = "testuser"
user.email = "test@example.com"
Run Code Online (Sandbox Code Playgroud)

我希望能够获得具有相应值的字典。当然,如果我保存记录,我希望它也id有。

python sqlalchemy

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

Flask Alchemy与棉花糖一起返回空JSON

我试图使用Flask Alchemy和Flask Marshmallow从数据库查询后返回json数据

但是,我的代码总是以某种方式返回空的JSON数据。

这是我的代码:

我的看法 :

@app.route('/customer/', methods=['GET'])
def get_customer():
  customers = models.Customer.query.all()
  #c = models.Customer.query.get(1) # Get Customer with an ID of 1

  customers_schema = CustomerSchema()

  print customers_schema.dump(customers).data
  payload = customers_schema.dump(customers).data
  resp = Response(response=payload, status=200, mimetype="application/json")
  return(resp)
Run Code Online (Sandbox Code Playgroud)

我的模特:

class Customer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    address = db.relationship('Address', backref='customer', lazy='dynamic')

    def __repr__(self):
        return '<Customer %r>' % (self.nickname)
Run Code Online (Sandbox Code Playgroud)

我的架构:

class CustomerSchema(ma.ModelSchema):
    class Meta:
        model = Customer
Run Code Online (Sandbox Code Playgroud)

这是从控制台看到的结果:

 * Debugger is …
Run Code Online (Sandbox Code Playgroud)

python json flask flask-sqlalchemy flask-restful

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

当sqlalchemy ORM类属性与数据库列不同时,如何获取ORM类属性列表?

假设您想在 sqlalchemy 中迭代 ORM 类的 ORM 属性。因此,您需要一个 ORM 属性列表。你是怎么得到那个名单的?

如果 ORM 类没有重命名属性,因此 ORM 属性与数据库列匹配,那么您可以使用以下解决方案:https : //stackoverflow.com/a/24748320/1023033 (顺便说一句,还有一个内置的源代码文件 /lib/sqlalchemy/orm/base.py 中的(私有)函数 _orm_columns() 似乎提供了此功能)

但是如果 python ORM 类的名称与数据库列的名称不同(例如在这 3 个 ORM 属性中):

>>> class User(Base):
...     __tablename__ = 'users'
...
...     id = Column('pkey', Integer, primary_key=True)
...     name = Column('user_name', String)
...     fullname = Column('human_name', String)
Run Code Online (Sandbox Code Playgroud)

那么那个方法就行不通了。那么,如何获得 ORM 属性的 Python 版本呢?

python sqlalchemy

0
推荐指数
1
解决办法
3413
查看次数