📜  如何使用 SQLAlchemy 使用 SELECT COUNT(*) 计算行数?

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

如何使用 SQLAlchemy 使用 SELECT COUNT(*) 计算行数?

在本文中,我们将看到如何在Python中使用 SQLAlchemy 选择行数。

由于我们将在这篇文章中使用 MySQL,因此我们还将在Python中为 MySQL 安装 SQL 连接器。但是,除了 SQL 连接器之外,没有任何代码实现会随着数据库的变化而变化。

pip install pymysql

我们将使用 mySQL 中的示例sakila 数据库。在本文中,我们将介绍 2 个示例,每个示例用于 SQLAchemy Core 和 ORM 层。在这两个示例中,我们将计算sakila数据库中的actor表中存在的记录数。如果您没有sakila数据库并且想在不安装它的情况下继续阅读本文,那么使用下面提到的链接中的 SQL 脚本来创建所需的模式和参与者表以及记录。 Sakila 演员表脚本

我们在以下两个示例中查看的 SQL 查询是 -

SELECT COUNT(*) FROM sakila.`actor`;

SQLAlchemy 核心

SQLAlchemy Core 是一个以模式为中心的模型,这意味着一切都被视为数据库的一部分,即行、列、表等。在上面的示例中,我们创建了元数据对象来访问表等数据库对象。使用这个对象,我们得到了演员表的元数据。然后使用下面提到的 SQLAlchemy 语法使用此元数据信息查询表。

Python
import sqlalchemy as db
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/sakila")
 
# CREATE THE METADATA OBJECT TO ACCESS THE TABLE
meta_data = db.MetaData(bind=engine)
db.MetaData.reflect(meta_data)
 
# GET THE `actor` TABLE FROM THE METADATA OBJECT
actor_table = meta_data.tables['actor']
 
# SELECT COUNT(*) FROM Actor
result = db.select([db.func.count()]).select_from(actor_table).scalar()
 
print("Count:", result)


Python
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/sakila")
 
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Actor(Base):
 
    __tablename__ = 'actor'
 
    actor_id    = db.Column(db.SmallInteger,
                            primary_key=True,
                            autoincrement=True)
    first_name  = db.Column(db.String(45))
    last_name   = db.Column(db.String(45))
    last_update = db.Column(db.DateTime)
    city        = db.Column(db.String(20))
 
# CREATE A SESSION OBJECT TO INITIATE QUERY IN DATABASE
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
 
# SELECT COUNT(*) FROM Actor
result = session.query(Actor).count()
 
print("Count:", result)


输出:

Count: 200

SQLAlchemy ORM

SQLAlchemy Core 使用以对象为中心的视图,它将模式与业务对象封装在一起。这是一个更 Pythonic 的实现,因为我们可以看到以类格式表示的表。我们已经使用这个类对象使用下面提到的 SQLAlchemy 语法来查询演员表。

Python

import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/sakila")
 
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Actor(Base):
 
    __tablename__ = 'actor'
 
    actor_id    = db.Column(db.SmallInteger,
                            primary_key=True,
                            autoincrement=True)
    first_name  = db.Column(db.String(45))
    last_name   = db.Column(db.String(45))
    last_update = db.Column(db.DateTime)
    city        = db.Column(db.String(20))
 
# CREATE A SESSION OBJECT TO INITIATE QUERY IN DATABASE
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
 
# SELECT COUNT(*) FROM Actor
result = session.query(Actor).count()
 
print("Count:", result)

输出:

Count: 200