Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python对Alchemy中AppenderSequeary属性的赋值无效_Python_Python 2.7_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

python对Alchemy中AppenderSequeary属性的赋值无效

python对Alchemy中AppenderSequeary属性的赋值无效,python,python-2.7,sqlalchemy,flask-sqlalchemy,Python,Python 2.7,Sqlalchemy,Flask Sqlalchemy,我有一个从数据库中选择用户的查询列表。每个用户对象都有标记列表。这是使用以下关系在标记模型中设置的: users = db.relationship('User', secondary=user_tag, backref=db.backref('tags', lazy='dynamic'), lazy='dynamic') 返回查询结果时,我有一个用户对象: id{int}1 标记{AppenderSequery}选择 一切正常,但我想将新列表指定给tags属性 user.tags=list(

我有一个从数据库中选择用户的查询列表。每个用户对象都有标记列表。这是使用以下关系在标记模型中设置的:

users = db.relationship('User', secondary=user_tag, backref=db.backref('tags', lazy='dynamic'), lazy='dynamic')
返回查询结果时,我有一个用户对象:

id{int}1

标记{AppenderSequery}选择

一切正常,但我想将新列表指定给tags属性

user.tags=list()
但是此行对对象没有任何影响,并且用户仍然包含AppenderSequence。这个属性是如何变得不可变的。我不明白。python还是新手,如果这个问题很愚蠢的话,很抱歉

编辑:


我不想改变数据库。我尝试从会话中分离用户对象,但未成功。我已经有了标签列表,只想将其设置为用户对象标签列表。之后,我将其序列化为json并返回带有用户列表的响应。通常我为标签url创建,url为,但这次我想用user返回标签列表,以加快速度。这不是一成不变的,但有点特殊。您已经使用配置了关系及其backref。这使得您可以使用一个查询对象来代替插入指令的集合,这对于处理大量相关对象集合非常方便。这个查询对象除了基本的过滤器和查询的所有功能外,还添加了一些方法和功能,例如追加、删除和支持赋值,但基本上它是查询相关对象的快捷方式。进一步阅读这些文件,我们发现:

由于动态关系的读取端总是查询数据库,因此在刷新数据之前,对基础集合的更改将不可见。但是,只要在正在使用的会话上启用了“自动刷新”,每次集合即将发出查询时,都会自动执行此操作

如果您已将引擎配置为回显它发送的SQL,则应该观察执行时发生的情况

user.tags = []
print user.tags.all()

Autoflush应该启动,更新所有最初相关的对象,使它们的外键为空取决于在发出获取关系的选择之前的级联。

它不是不可变的,但有点特殊。您已经使用配置了关系及其backref。这使得您可以使用一个查询对象来代替插入指令的集合,这对于处理大量相关对象集合非常方便。这个查询对象除了基本的过滤器和查询的所有功能外,还添加了一些方法和功能,例如追加、删除和支持赋值,但基本上它是查询相关对象的快捷方式。进一步阅读这些文件,我们发现:

由于动态关系的读取端总是查询数据库,因此在刷新数据之前,对基础集合的更改将不可见。但是,只要在正在使用的会话上启用了“自动刷新”,每次集合即将发出查询时,都会自动执行此操作

如果您已将引擎配置为回显它发送的SQL,则应该观察执行时发生的情况

user.tags = []
print user.tags.all()

Autoflush应该启动,更新所有最初相关的对象,清空它们的外键,这取决于在发出获取关系的选择之前的级联。

我不想更改数据库。我尝试从会话中分离用户对象,但未成功。我已经有了标签列表,只想将其设置为用户对象标签列表。之后,我将其序列化为json并返回带有用户列表的响应。通常我会为标记url创建,url_为,但这次我想与用户一起返回标记列表,以使事情更快。在这种情况下,我建议在序列化期间设置标记。正如您所注意到的,appender query属性用于处理关系,即位于数据库中的数据。如果我理解正确,您有一组属于用户的单独标记,因此在我看来,您最好的选择是在序列化期间合并它们,而不是首先尝试在用户对象上设置它们。但这只是一个观点。你也应该在你的问题中包括这一点。现在,这有点像是一个问题:您询问其他问题,而不是询问您真正想做什么,在本例中,向DB对象的序列化添加额外数据。是的。谢谢你的回答。我将使用这种方法。我接受了你的回答。真正有用的是你的评论。Regard我不习惯更改数据库。我尝试从会话中分离用户对象,但未成功。我已经有了标签列表,只想将其设置为用户对象标签列表。之后,我将其序列化为json并返回带有用户列表的响应。通常我会为标记url创建,url_为,但这次我想与用户一起返回标记列表,以使事情更快。在这种情况下,我建议在序列化期间设置标记。正如您所注意到的,appender查询属性用于处理
关系,即位于数据库中的数据。如果我理解正确,您有一组属于用户的单独标记,因此在我看来,您最好的选择是在序列化期间合并它们,而不是首先尝试在用户对象上设置它们。但这只是一个观点。你也应该在你的问题中包括这一点。现在,这有点像是一个问题:您询问其他问题,而不是询问您真正想做什么,在本例中,向DB对象的序列化添加额外数据。是的。谢谢你的回答。我将使用这种方法。我接受了你的回答。真正有用的是你的评论。当做