Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 从纯SQL查询实例化模型类对象?_Python_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 从纯SQL查询实例化模型类对象?

Python 从纯SQL查询实例化模型类对象?,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,在“Flask Mega教程”之后,我正在开发我的第一个合适的web应用程序。它帮助我开始使用SQLAlchemy ORM,并让我了解了如何使用这个工具 例如,我有一个班级宠物。我可以打电话 foo = Pet.query.filter_where(id=1).first() 这将导致foo的宠物级。Pet的定义有很多属性,但每个属性都属于“db.Column”类型,这很有意义,因为每个Pet都是Pets表中的一条记录 我感到困惑的是,现在我想对Pet表执行更复杂的SQL,但仍然可以作为Pe

在“Flask Mega教程”之后,我正在开发我的第一个合适的web应用程序。它帮助我开始使用SQLAlchemy ORM,并让我了解了如何使用这个工具

例如,我有一个班级宠物。我可以打电话

foo = Pet.query.filter_where(id=1).first() 
这将导致foo的宠物级。Pet的定义有很多属性,但每个属性都属于“db.Column”类型,这很有意义,因为每个Pet都是Pets表中的一条记录

我感到困惑的是,现在我想对Pet表执行更复杂的SQL,但仍然可以作为Pet对象访问这些记录

pets = db.session.execute('SELECT * FROM pet WHERE blahblah = blahblah').fetch_all()
现在我有了这个宠物列表,其中包含了查询返回的每个宠物记录的所有属性

现在如何为每个记录实例化类Pet的对象?当我使用ORM进行查询时,我会返回对象。app/models.py中定义的我的宠物类没有接受任何参数的init

现在我正在获取结果列表,从结果中获取id值,然后在for循环中创建所有结果作为对象

pets = db.session.execute('SELECT * FROM pet WHERE blahblah = blahblah').fetch_all()

pet_objects=[]

for p in pets:
  record_id = p.id
  pet_object = Pet.query.filter_where(id=record_id)
  pet_objects.append(pet_object)
从这一点上,我可以像对待使用ORM的查询结果一样对待我的宠物对象列表,ORM将自动返回对象

我的问题是,我这样做对吗?似乎不正确,因为对于每一条记录,我首先用SQL点击db,然后再次用对象的“id”实例化对象,但我不确定在这个框架中如何从记录->对象


很抱歉问了这么长时间,但我一直在努力解决这个问题

如果我错了,请纠正我,您希望获得此查询的结果,请使用sqlalchemy从pet中选择*其中blahblah=blahblah

您可以在基本查询类中使用filter_by方法:

例如,对于您的查询,您可以使用以下内容:

pet_objects=pet.query.filter_byblahblah='blahblah'.all

您可以使用联接创建更复杂的查询,或者简单地添加更多where约束,并添加更多参数以筛选\u,例如:
query.filter\u bycol\u 1='something',col\u 2='other thing'

这可能很有用。。。嘿,谢谢你的回复。我确实认为你是对的,但是当我的查询达到一定的复杂程度时,我在ORM过滤选项方面遇到了一些障碍-现在我需要正则表达式/通配符文本搜索,和或子句来查找正确的记录。我将看一看上面有人以评论的形式发布的教程,看看它是否有帮助。欢迎光临,你可以在这个链接中找到对正则表达式查询有用的东西:如果你解释得更多,我将帮助你。但我认为session.queryObject.filterObject.column.like'something%'之类的东西在很多情况下都会对您有所帮助,而且比regex更便宜!