sqlalchemy 的 Core 方式使用示例
2016-05-21 12:08
302 查看
知乎: sqlalchemy 的 Core 方式操作数据是一种怎样的体验?
答: 爽!
本文基于:win 10 + python 3.4 + sqlalchemy 1.0.13
基本步骤如下:
答: 爽!
本文基于: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()
相关文章推荐
- SQL Server 2008 ——关系
- 【Linux】redis集群
- 了解数据库语句
- 使用C# 怎么生成.db后缀的文件,并且能够使用sql语言进行读取等 操作
- 图解用MySQL创建进销存数据库
- 在sqlserver中如何导入.db数据库文件
- jsp excel数据 添加到 数据库表中
- DB扩展名的数据库文件怎么打开:两种db数据库的打开方式
- Redis简介,安装和配置,停止,卸载(图解方式)
- sql 相关
- 数据存储知识(3)--mysql主从服务器的搭建
- 出现“System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部”错误的解决方案
- MySQL复制表结构,表数据。
- 数据库操作封装类 DBHelper.cs
- mysql5.7.9安装步骤及如何将原来数据库中的数据复制到新的数据库中使用
- MySQL安装脚本
- sql server中syscolumns各个字段的意义
- mysql乱码解决
- Win10-64bit安装MySQL5.7,解决Access denied for user 'root'@'localhost' 问题
- MySQL高可用架构在业务层面的分析研究