sqlalchemy 的 Core 方式使用示例

简介: 知乎: sqlalchemy 的 Core 方式操作数据是一种怎样的体验? 答: 爽!   本文基于:win 10 + python 3.4 + sqlalchemy 1.0.13   基本步骤如下:   1.

知乎: sqlalchemy 的 Core 方式操作数据是一种怎样的体验?

答: 爽!

 

本文基于:win 10 + python 3.4 + sqlalchemy 1.0.13

 

基本步骤如下:

 

1. 绑定数据库

from sqlalchemy import create_engine

engine = create_engine('sqlite:///:memory:', echo=True)

 

2. 连接数据库

conn = engine.connect()

 

3. 元数据

from sqlalchemy import MetaData

metadata = MetaData(engine)

 

4. 定义表

from sqlalchemy import Table, Column, Integer, String, ForeignKey, Sequence
users
= Table('users', metadata, Column('id', Integer, Sequence('user_id_seq'), primary_key=True), Column('name', String), Column('fullname', String), ) addresses = Table('addresses', metadata, Column('id', Integer, primary_key=True), Column('user_id', None, ForeignKey('users.id')), Column('email_address', String, nullable=False) )

 

5. 创建表

# metadata.drop_all()
metadata.create_all()

 

6. 插入

# 方式一
ins = users.insert().values(name='jack', fullname='Jack Jones')
conn.execute(ins)

# 方式二
conn.execute(users.insert(), id=2, name='wendy', fullname='Wendy Williams')

# 方式三
conn.execute(addresses.insert(), [
    {'user_id': 1, 'email_address' : 'jack@yahoo.com'},
    {'user_id': 1, 'email_address' : 'jack@msn.com'},
    {'user_id': 2, 'email_address' : 'www@www.org'},
    {'user_id': 2, 'email_address' : 'wendy@aol.com'},
 ])

 

7. 查询

from sqlalchemy.sql import select
for row in conn.execute(select([users])): print("name:", row[users.c.name], "; fullname:", row[users.c.fullname]) for row in conn.execute(select([users, addresses])): print(row) for row in conn.execute(select([users, addresses]).where(users.c.id == addresses.c.user_id)): print(row) from sqlalchemy.sql import and_, or_, not_ s = select([(users.c.fullname + ", " + addresses.c.email_address). label('title')]).\ where( and_( users.c.id == addresses.c.user_id, users.c.name.between('m', 'z'), or_( addresses.c.email_address.like('%@aol.com'), addresses.c.email_address.like('%@msn.com') ) ) ) conn.execute(s).fetchall()

 

8. 完整代码

# 绑定数据库
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)


# 连接数据库
conn = engine.connect()


# 元数据
from sqlalchemy import MetaData
metadata = MetaData(engine)


# 定义表
from sqlalchemy import Table, Column, Integer, String, ForeignKey, Sequence
users = Table('users', metadata,
    Column('id', Integer, Sequence('user_id_seq'), primary_key=True),
    Column('name', String),
    Column('fullname', String),
)

addresses = Table('addresses', metadata,
    Column('id', Integer, primary_key=True),
    Column('user_id', None, ForeignKey('users.id')),
    Column('email_address', String, nullable=False)
)


# 创建表
# metadata.drop_all()

metadata.create_all() # 插入 # 方式一 ins = users.insert().values(name='jack', fullname='Jack Jones') result = conn.execute(ins) # 方式二 conn.execute(users.insert(), id=2, name='wendy', fullname='Wendy Williams') # 方式三 conn.execute(addresses.insert(), [ {'user_id': 1, 'email_address' : 'jack@yahoo.com'}, {'user_id': 1, 'email_address' : 'jack@msn.com'}, {'user_id': 2, 'email_address' : 'www@www.org'}, {'user_id': 2, 'email_address' : 'wendy@aol.com'}, ]) # 查询 from sqlalchemy.sql import select
for row in conn.execute(select([users])): print("name:", row[users.c.name], "; fullname:", row[users.c.fullname]) for row in conn.execute(select([users, addresses])): print(row) for row in conn.execute(select([users, addresses]).where(users.c.id == addresses.c.user_id)): print(row) from sqlalchemy.sql import and_, or_, not_
s
= select([(users.c.fullname + ", " + addresses.c.email_address). label('title')]).\ where( and_( users.c.id == addresses.c.user_id, users.c.name.between('m', 'z'), or_( addresses.c.email_address.like('%@aol.com'), addresses.c.email_address.like('%@msn.com') ) ) ) conn.execute(s).fetchall()

 



 

目录
相关文章
|
11月前
|
API Python
python 详细理解 import ---- openstack自动import class 到 特定命名空间
python 详细理解 import ---- openstack自动import class 到 特定命名空间
92 0
|
3月前
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
179 0
|
3月前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
5月前
|
XML 数据格式 Python
Python的`import`用于加载模块,基础形式是`import module`,全量导入
【6月更文挑战第23天】Python的`import`用于加载模块,基础形式是`import module`,全量导入;`from module import name`选择性导入部分,减少命名空间污染;`from module import *`导入所有(不推荐),易引发冲突。别名导入如`from math import sqrt as square_root`可避免冲突。包导入用`.`,如`import xml.etree.ElementTree as ET`。
61 8
|
5月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
6月前
|
JSON 数据格式 索引
python之JMESPath:JSON 查询语法库示例详解
python之JMESPath:JSON 查询语法库示例详解
70 0
|
JSON Java 关系型数据库
java mybatisplus查询处理mysql JSON类型字段
java mybatisplus查询处理mysql JSON类型字段
|
JSON 缓存 Serverless
23.从入门到精通:Python模块 import 语句 from … import 语句 from … import * 语句 深入模块 修改my_module的源代码
23.从入门到精通:Python模块 import 语句 from … import 语句 from … import * 语句 深入模块 修改my_module的源代码