📌  相关文章
📜  如何使用 SQLAlchemy 只选择一列?

📅  最后修改于: 2022-05-13 01:55:32.689000             🧑  作者: Mango

如何使用 SQLAlchemy 只选择一列?

在本文中,我们将了解如何在Python中使用 SQLAlchemy 仅选择一列。

SQLAlchemy 是一个包含许多不同组件的大型 SQL 工具包。两个最大的组件是 SQLAlchemy Core 和 SQLAlchemy ORM。它们之间的主要区别是 SQLAlchemy Core 是一个以模式为中心的模型,这意味着一切都被视为数据库的一部分,即行、列、表等,而 SQLAlchemy Core 使用以对象为中心的视图,它将模式与业务对象封装在一起. SQLAlchemy 是一个更 Pythonic 的实现。在这篇文章中,我们将研究 SQLAlchemy 核心和 ORM,以及如何使用它只选择一列。

安装 SQLAlchemy

SQLAlchemy 可通过 pip install 包获得。

pip install sqlalchemy

但是,如果您使用的是烧瓶,您可以使用它自己的 SQLAlchemy 实现。可以使用以下方式安装:

pip install flask-sqlalchemy

在我们继续编写代码之前,请确保您有一个可以使用的数据库。在下面的示例中,我们将使用 mySQL 数据库。随意使用任何数据库,但连接字符串会相应变化。

下面给出的语法适用于 SQLAlchemy 核心和 ORM。

SQLAlchemy 核心

Python
import sqlalchemy as db
 
# DEFINE THE ENGINE (CONNECTIO OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/Geeks4Geeks")
 
# CREATE THE METADATA OBJECT
metadata_obj = db.MetaData()
 
# DEFINE THE PROFILE TABLE WITH 3 COLUMNS
profile = db.Table(
    'profile',
    metadata_obj,
    db.Column('email', db.String(50), primary_key=True),
    db.Column('name', db.String(100)),
    db.Column('contact', db.Integer),
)
 
# CREATE THE PROFILE TABLE IN THE DATABASE
metadata_obj.create_all(engine)
 
# INSERT RECORDS IN THE PROFILE TABLE
stmt = profile.insert().values(("amitpathak@zmail.com",
                                "Amit Pathak",
                                879456123))
engine.execute(stmt)
stmt = profile.insert().values(("amitmishra@zmail.com",
                                "Amit Mishra",
                                456789123))
engine.execute(stmt)
stmt = profile.insert().values(("ravipandey@zmail.com",
                                "Ravi Pandey",
                                321456987))
engine.execute(stmt)
 
# SQLAlCHEMY CORE QUERY TO FETCH SINGLE COLUMN (EMAIL)
query = db.select([profile.c.email])
 
# FETCH ALL THE RECORDS IN THE RESPONSE
result = engine.execute(query).fetchall()
 
# VIEW THE ENTRIES IN THE RESULT
for record in result:
    print("\n", record)


Python
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
# DEFINE THE ENGINE (CONNECTIO OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/Geeks4Geeks")
 
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Profile(Base):
 
    __tablename__ = 'profile'
 
    email   = db.Column(db.String(50), primary_key=True)
    name    = db.Column(db.String(100))
    contact = db.Column(db.Integer)
 
# SQLAlCHEMY CORE QUERY TO FETCH SINGLE COLUMN (EMAIL)
query = db.select([Profile.name])
 
# FETCH ALL THE RECORDS IN THE RESPONSE
result = engine.execute(query).fetchall()
 
# VIEW THE ENTRIES IN THE RESULT
for record in result:
    print("\n", record)


输出:

在上面的代码中,我们使用 SQLAlchemy 核心从表中选择一列。我们首先创建了一个包含 3 列的配置文件表,即电子邮件、姓名和联系人。然后,我们在此表中输入了 3 条不同的记录。然后使用 sqlalchemy 库的 select 方法获取记录。

SQLAlchemy ORM

在第一个示例中,我们已经创建了 profile 表并在表中提供了 3 条记录。在此示例中,我们重点介绍如何使用 SQLAlchemy ORM 提取单个列。如我们所见,在查询单行时,ORM 和核心具有相同的语法。唯一的区别是我们定义配置文件表的元数据的方式。在 ORM 代码中,由于观察到了Python类的使用,它似乎更加 Pythonic。对于此示例,我们获取了 name 列。我们首先定义配置文件表,然后使用此定义从配置文件表中获取名称列。

Python

import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
# DEFINE THE ENGINE (CONNECTIO OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/Geeks4Geeks")
 
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Profile(Base):
 
    __tablename__ = 'profile'
 
    email   = db.Column(db.String(50), primary_key=True)
    name    = db.Column(db.String(100))
    contact = db.Column(db.Integer)
 
# SQLAlCHEMY CORE QUERY TO FETCH SINGLE COLUMN (EMAIL)
query = db.select([Profile.name])
 
# FETCH ALL THE RECORDS IN THE RESPONSE
result = engine.execute(query).fetchall()
 
# VIEW THE ENTRIES IN THE RESULT
for record in result:
    print("\n", record)

输出: