sqlalchemy 通过 resultproxy-object 更新值

具有

我有一个包含大量文本数据的大表。下面的代码片段是textcorpus-reader我目前正在编写的一个更大的示例中的一个最小示例

from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///corpus.db")
meta = MetaData(bind=engine)
Session = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False, autocommit=False)

data_table = Table("data", meta, autoload=True, autoload_with=engine)


def computationally_heavy(raw_text):
    """
    This does a lot of text-processing and needs a lot of RAM and CPU.
    For the sake of this example it does just this:
    """
    return raw_text.split("\n")


session = Session()
query = session.query(data_table).yield_every(10)

for i, row in enumerate(query):
    result = computationally_heavy(row.raw_text)

    # This is, what is not working - column 'processed_text' does already exist:
    row.processed_text = result

    if i % 250 == 0:
        s.flush()

session.commit()
session.close()

我的问题是我想更新for循环中的单行,但我得到:

AttributeError: can't set attribute. 

我读到这种分配给行的方式在sqlalchemy0.9 或其他版本之前的版本中是可能的(我有 1.2.0,但降级似乎是一个愚蠢的选择,因为必须有办法做到这一点。)

而且我知道这种基于查询结果分配给单行sqlsoup的方式在sqlalchemy.

我的问题:

我该怎么做row.processed_text = result才能获得所需的单行更新?

由于这应该适用于不同的数据库,其中列的名称可能不同,我想避免硬编码,Query(data_table).where(data_table.primary_key == row.primary_key).update()因为我不一定知道主键列的名称。

PS.: 数据库的性能不是这里的重点,因为我有时间,这只是很少运行computationally_heavy(),反正消耗了很多时间。

另外我是社会科学家,不是程序员,很抱歉,如果这是一个非常愚蠢的问题......

伊利亚·埃维莱拉

好像你已经混合了CoreORM模型实例通过检测跟踪对属性的更改Table使用您的表,而不仅仅是定义一个声明类:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(metadata=meta)

class DataTable(Base):
    __table__ = Table("data", meta, autoload=True, autoload_with=engine)

在您的查询中使用它,生成的模型对象将跟踪对其属性的更改:

query = session.query(DataTable).yield_every(10)

我读到这种分配给行的方式在 0.9 之前的 sqlalchemy 版本中是可能的。(我有 1.2.0,但降级似乎是一个愚蠢的选择,因为必须有办法做到这一点。)

结果元组可分配是由于一个问题并在 1.0.5 版中修复这并不意味着他们以与 ORM 相同的方式跟踪更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQLAlchemy更新

来自分类Dev

SqlAlchemy TIMESTAMP“更新”额外

来自分类Dev

sql通过比较值来插入或更新

来自分类Dev

通过更新道具更新输入值

来自分类Dev

Python Flask SQLalchemy查询过滤器通过布尔值忽略False

来自分类Dev

在sqlalchemy中加入值

来自分类Dev

List1中的<object>更新PARAM从list2中的<object>通过用java 8

来自分类Dev

通过反射更新实体属性值

来自分类Dev

通过SQLalchemy更新PosgreSQL数据库;语法错误

来自分类Dev

如何在Flask SQLAlchemy中更新布尔值

来自分类Dev

通过使值utc sql更新datetime字段

来自分类Dev

通过Javascript更新多个选择值

来自分类Dev

通过<input>标签更新数组的值

来自分类Dev

通过AjaxListener更新值

来自分类Dev

通过更新字段删除值

来自分类Dev

更新HashSet <Object>值

来自分类Dev

无法通过DOM更新“ $ scope”索引值

来自分类Dev

通过函数更新服务中的“ this”值

来自分类Dev

通过ajax更新/插入值

来自分类Dev

sql通过比较值来插入或更新

来自分类Dev

通过更新道具更新输入值

来自分类Dev

Python Flask SQLalchemy查询过滤器通过布尔值忽略False

来自分类Dev

SQLAlchemy ORM通过检查列表中是否有其他表值来更新值

来自分类Dev

通过脚本更新xml标签的值

来自分类Dev

SQLAlchemy 中的更新错误

来自分类Dev

sqlalchemy 更新部分日期

来自分类Dev

通过 GET 更新对象值而不重复

来自分类Dev

SQLAlchemy 在 filter_by 之后动态更新行中的值

来自分类Dev

通过 SQLAlchemy 创建字典