使用SQLAlchemy在现有表上的简单SELECT语句

时间:2015-06-11 16:03:59

标签: python mysql select sqlalchemy

在互联网上没有任何地方存在关于SQLAlchemy 1.0的简单SELECT语句的简单的几行教程。

假设我已经使用create_engine()建立了我的数据库连接,并且我的数据库表已经存在,我想知道如何执行以下查询:< / p>

select
    name,
    age
from
    users
where
    name = 'joe'
    and
    age = 100

3 个答案:

答案 0 :(得分:3)

在试图弄清楚同一件事时发现了这一点。

这是答案对我的显示方式。我很想知道我是否/错在哪里,或者这是否现在已经全部内置在熊猫中了。

要通过SQLAlchemy从表中选择数据,您需要在SQLAlchemy中构建该表的表示形式。如果Jupyter Notebook的响应速度有任何指示,则直到执行a /查询时,该表示才会被填充(使用现有数据库中的数据)。

您需要Table来建立表格。您需要select从数据库中选择数据。您需要metadata ...出于不清楚的原因,即使在文档(http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData)中也是如此。

from sqlalchemy import create_engine, select, MetaData, Table

engine = create_engine("dburl://user:pass@database/schema")
metadata = MetaData(bind=None)
table = Table('table_name', metadata, autoload = True, autoload_with = engine)
stmt = select([table]).where(table.columns.column_name == 'filter')

connection = engine.connect()
results = connection.execute(stmt).fetchall()

然后您可以遍历结果。

for result in results:
    print(result)

我用本地数据库检查了此结果,SQLAlchemy结果与原始SQL结果不相等。对于我的数据集,不同之处在于数字的格式。 SQL返回float64(例如633.07),而SQLAlchemy返回对象(我认为Decimal,例如633.0700000000。)

一些帮助:https://www.datacamp.com/courses/introduction-to-relational-databases-in-python

答案 1 :(得分:0)

由于原始问题在select语句中有两列,因此可能使某些人对使用该语句的书写方式感到困惑:

from sqlalchemy import and_  
stmt = select([users.columns.name,users.columns.age])  
stmt= stmt.where(and_(name=='joe',age==100)  
for res in connection.execute(stmt):  
    print(res)

答案 2 :(得分:-3)

我认为以下内容适用于查询用户数据库表

from sqlalchemy.sql import and_
s = select([users]).where(and_(users.c.name == 'joe', users.c.age == 100))
for row in conn.execute(s):
    print row

http://docs.sqlalchemy.org/en/latest/core/tutorial.html