一、SQLAlchemy简介
1.1、SQLAlchemy是什么?
sqlalchemy是一个python语言实现的的针对关系型数据库的orm库。可用于连接大多数常见的数据库,比如Postges、MySQL、SQLite、Oracle等。
1.2、为什么要使用SQLAlchemy?
它将你的代码从底层数据库及其相关的SQL特性中抽象出来。
1.3、SQLAlchemy提供了两种主要的使用模式
SQL表达式语言(SQLAlchemy Core)
ORM
1.4、应该选择哪种模式?
- 虽然你使用的框架中已经内置了ORM,但是希望添加更强大的报表功能,请选用Core。
- 如果你想在一个一模式为中心的视图中查看数据(用户类似于SQL),请使用Core。
- 如果你的数据不需要业务对象,请使用Core。
- 如果你要把数据看作业务对象,请使用ORM。
- 如果你想快速创建原型,请使用ORM。
- 如果你需要同事使用业务对象和其他与问题域无关的数据,请组合使用Core和ORM。
1.5、连接数据库
要连接到数据库,需要先创建一个SQLAlchemy引擎。SQLAlchemy引擎为数据库创建一个公共接口来执行SQL语句。这是通过包装数据库连接池和方言(不同数据库客户端)来实现的。
SQLAlchemy提供了一个函数来创建引擎。在这个函数中,你可以指定连接字符串,以及其他一些可选的关键字参数。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///cookies.db')
engine1 = create_engine('sqlite:///:memory:')
engine2 = create_engine('sqlite:/home/cookiemonster/cookies.db')
engine3 = create_engine('sqlite:///c:\\Users\\cookiemonster\\cookies.db')
engine_mysql = create_engine('mysql+pymysql://cookiemonster:chocolatechip', '@mysql01.monster.internal/cookies', pool_recycle=3600)
1.6、模式和类型
为了访问底层数据库,SQLAlchemy需要用某种东西来代表数据库中的表。为此,可以使用下面三种方法总的一种:
- 使用用户定义的Table对象
- 使用代表数据表的声明式类
- 从数据库中推断
二、SQLAlchemy core
SQLAlchemy core定义表结构使用的是1.5中说的第1种方式。table对象包含一系列带有类型的列和属性,它们与一个常见的元数据容器相关联。
元数据可以看作是一种Table对象目录。这些表可以通过MetaData.tables来访问。
2.1、定义表结构
在SQLAlchemy Core中,我们通过Table构造函数来初始化Table对象。我们要在构造函数中提供MetaData对象(元数据)和表名,任何其他参数都被认为是列对象。列是通过Column()函数创建的。
from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import MedaData
metadata = MetaData()
user = table('user', metadata,
Column(id, Integer(), primary_key=True),
Column(name, String(255)),
)
engine = create_engine('sqlite:///:memory:')
metadata.create_all(engine) # 表的持久化
2.2、插入数据
首先创造一条insert语句,用来把小明放入user表中。为此,先调用user表的insert()方法,然后再使用values()语句,关键字参数为各个列及相应值:
ins = user.insert().values(
id=1,
name='小明'
)
print(str(ins))
到此仅仅只是创建了一个inset语句,还没有真正执行呢,接下来执行插入操作:
connection = engine.connect()
result = connection.execute(ins