Python 使用SqlAlchemy选择语句
是的,非常基本的问题。 我已经使用声明性的_base成功地创建了我的数据库,并且可以在数据库中执行插入操作。我只是对SqlAlchemy sql语句有几个问题 我已经创建了一个名为Location的表。Python 使用SqlAlchemy选择语句,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,是的,非常基本的问题。 我已经使用声明性的_base成功地创建了我的数据库,并且可以在数据库中执行插入操作。我只是对SqlAlchemy sql语句有几个问题 我已经创建了一个名为Location的表。 一些问题(见下面的代码): 对于语句“print row”,我必须指定要输出的每个列名。i、 e.“打印行名、行名等”为什么?(否则,打印语句将输出“” 另外,与数据库交互并执行查询(选择、插入、更新等)的首选方式是什么?似乎有一系列选项:例如使用sqlalchemy.orm.select或en
一些问题(见下面的代码):
“”
().execute().fetchall()
,甚至conn.execute().
选项很好,但现在它们都让我困惑from sqlalchemy import create_engine
from sqlalchemy.sql import select
from location_db_setup import *
db_path = "sqlite:////volumes/users/shared/programming/python/web/map.db"
engine = create_engine(db_path, echo= True)
Session = sessionmaker(bind= engine)
session = Session()
session.query(Location).fetchall()
for row in locations:
print row
位置
是什么。我假设它是一个映射类,因此您请求的是所有位置
对象的列表,而不是行。打印对象时,您会得到其字符串表示形式。对象的字符串表示形式可以通过定义来更改g自定义\uuu str\uu
方法sqlalchemy.orm
包中有函数的原因位置
是什么。我假设它是一个映射类,因此您请求的是所有位置
对象的列表,而不是行。打印对象时,您会得到其字符串表示形式。对象的字符串表示形式可以通过定义来更改g自定义\uuu str\uu
方法sqlalchemy.orm
包中有函数的原因在使用ORM时,与db交互的首选方式不是使用查询,而是使用与您正在操作的表相对应的对象,通常与会话对象结合使用。在某些ORM中,SELECT查询成为get()或find()调用,在其他ORM中成为query()调用。INSERT成为创建所需类型的新对象(可能会显式地添加它,例如sqlalchemy中的session.add())。UPDATE变成编辑这样的对象,DELETE变成删除对象(例如session.DELETE())。ORM旨在为您处理将这些操作转换为SQL的艰巨工作
您读过吗?在使用ORM时,与db交互的首选方法不是使用查询,而是使用与您正在操作的表相对应的对象,通常与会话对象结合使用。在某些ORM中,SELECT查询成为get()或find()调用,query()调用其他对象。INSERT将创建所需类型的新对象(可能会显式添加它,例如sqlalchemy中的session.add())。UPDATE将编辑这样的对象,而DELETE将删除对象(例如session.DELETE())。ORM旨在为您处理将这些操作转换为SQL的艰巨工作
你读了吗?丹尼斯和基洛坦给了你很好的答案。我只想集中讨论第二点 有时取决于您的喜好。有时,您需要特定于数据库的功能,但ORM无法做到。在这种情况下,您应该使用
Session().execute()
或conn.execute()
。另一种情况是,您有一个非常复杂的查询,无法找到合适的ORM表达式
通常,使用诸如
select([…]).where(…
或Session.query().filter(…
(声明性基)之类的ORM功能就足够了。几乎每个sql查询都有一个ORM等价物。Denis和Kylotan给了您很好的答案。我将重点放在第2点
有时取决于您的喜好。有时,您需要特定于数据库的功能,但ORM无法做到。在这种情况下,您应该使用Session().execute()
或conn.execute()
。另一种情况是,您有一个非常复杂的查询,无法找到合适的ORM表达式
通常,使用诸如select([…])、where(…
或Session.query()、filter(…
(声明性基)等ORM功能就足够了。几乎每个sql查询都有ORM等价物