Python 使用SqlAlchemy选择语句

Python 使用SqlAlchemy选择语句,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,是的,非常基本的问题。 我已经使用声明性的_base成功地创建了我的数据库,并且可以在数据库中执行插入操作。我只是对SqlAlchemy sql语句有几个问题 我已经创建了一个名为Location的表。 一些问题(见下面的代码): 对于语句“print row”,我必须指定要输出的每个列名。i、 e.“打印行名、行名等”为什么?(否则,打印语句将输出“” 另外,与数据库交互并执行查询(选择、插入、更新等)的首选方式是什么?似乎有一系列选项:例如使用sqlalchemy.orm.select或en

是的,非常基本的问题。 我已经使用声明性的_base成功地创建了我的数据库,并且可以在数据库中执行插入操作。我只是对SqlAlchemy sql语句有几个问题

我已经创建了一个名为Location的表。
一些问题(见下面的代码):

  • 对于语句“print row”,我必须指定要输出的每个列名。i、 e.“打印行名、行名等”为什么?(否则,打印语句将输出
    “”

  • 另外,与数据库交互并执行查询(选择、插入、更新等)的首选方式是什么?似乎有一系列选项:例如使用sqlalchemy.orm.select或engine.text
    ().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
    方法
  • 尽管ORM是SQLAlchemy最重要的部分,但它不是唯一的部分。它还公开了许多与ORM不直接相关的功能。当您使用对象时,创建查询的首选方法是相应的会话方法。但有时您需要不绑定到特定会话的可选对象(它们不是直接执行的,而是在传递给会话方法的表达式中使用的)。这就是为什么
    sqlalchemy.orm
    包中有函数的原因
  • 示例中的代码不完整且有错误。因此无法确定此处的
    位置
    是什么。我假设它是一个映射类,因此您请求的是所有
    位置
    对象的列表,而不是行。打印对象时,您会得到其字符串表示形式。对象的字符串表示形式可以通过定义来更改g自定义
    \uuu str\uu
    方法
  • 尽管ORM是SQLAlchemy最重要的部分,但它不是唯一的部分。它还公开了许多与ORM不直接相关的功能。当您使用对象时,创建查询的首选方法是相应的会话方法。但有时您需要不绑定到特定会话的可选对象(它们不是直接执行的,而是在传递给会话方法的表达式中使用的)。这就是为什么
    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等价物