📌  相关文章
📜  Python SQLAlchemy - 编写一个查询,其中列包含子字符串

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

Python SQLAlchemy - 编写一个查询,其中列包含子字符串

在本文中,我们讨论了如何在 SQLAlchemy 中针对Python中的 PostgreSQL 数据库提取包含子字符串的列值。

在 SQLAlchemy 中,像 SUM、MIN、MAX 这样的通用函数可以像使用 func 属性的传统 SQL 函数一样被调用。

SQLAlchemy 中使用的一些常用函数是contains、count、cube、current_date、current_time、max、min、mode 等。

为演示创建表

从 SQLAlchemy 包中导入必要的函数。使用 create_engine()函数与 PostgreSQL 数据库建立连接,如下所示。创建一个名为 books 的表,其中包含 book_id 和 book_price 列。如图所示,使用 insert() 和 values()函数将记录插入表中。

Python3
# import necessary packages
import sqlalchemy
from sqlalchemy import create_engine, MetaData, 
Table, Column, Numeric, Integer, VARCHAR
from sqlalchemy.engine import result
  
# establish connections
engine = create_engine(
    "database+dialect://username:password@hostname:port/databasename")
  
# initialize the Metadata Object
meta = MetaData(bind=engine)
MetaData.reflect(meta)
  
# create a table schema
books = Table(
    'books', meta,
    Column('book_id', Integer, primary_key=True),
    Column('book_price', Numeric),
    Column('genre', VARCHAR),
    Column('book_name', VARCHAR)
)
  
meta.create_all(engine)
  
# insert records into the table
statement1 = books.insert().values(book_id=1, 
                                   book_price=12.2,
                                   genre='fiction', 
                                   book_name='Old age')
  
statement2 = books.insert().values(book_id=2,
                                   book_price=13.2,
                                   genre='non-fiction', 
                                   book_name='Saturn rings')
  
statement3 = books.insert().values(book_id=3,
                                   book_price=121.6,
                                   genre='fiction',
                                   book_name='Supernova')
  
statement4 = books.insert().values(book_id=4, 
                                   book_price=100,
                                   genre='non-fiction', 
                                   book_name='History of the world')
  
statement5 = books.insert().values(book_id=5, 
                                   book_price=1112.2,
                                   genre='fiction', 
                                   book_name='Sun city')
  
# execute the insert records statement
engine.execute(statement1)
engine.execute(statement2)
engine.execute(statement3)
engine.execute(statement4)
engine.execute(statement5)


Python3
# Get the `books` table from the Metadata object
BOOKS = meta.tables['books']
  
# SQLAlchemy Query to pick
# records containing substring fiction
query = sqlalchemy.select([
    BOOKS.c.book_name,
]).filter(BOOKS.c.genre.contains("fiction"))
  
  
# Fetch all the records
result = engine.execute(query).fetchall()
  
# View the records
for record in result:
    print("\n", record)


输出:

样品表

在 SQLAlchemy 中通过子字符串提取列值

sqlalchemy.select([
Tablename.c.column_name,
sqlalchemy.func.sum(Tablename.c.column_name)
]).group_by(Tablename.c.column_name)

从连接数据库时初始化的 Metadata 对象获取书籍到表,并将 SQL 查询传递给 execute()函数,并使用 fetchall()函数获取所有结果。使用 for 循环遍历结果。

此 SQL 查询返回在流派列中包含子字符串“fiction”的书名。

Python3

# Get the `books` table from the Metadata object
BOOKS = meta.tables['books']
  
# SQLAlchemy Query to pick
# records containing substring fiction
query = sqlalchemy.select([
    BOOKS.c.book_name,
]).filter(BOOKS.c.genre.contains("fiction"))
  
  
# Fetch all the records
result = engine.execute(query).fetchall()
  
# View the records
for record in result:
    print("\n", record)

输出:

包含子字符串的列的输出