SQLAlchemy ORM
SQLAlchemy对象关系映射器提供了一种将用户定义的Python类与数据库表关联起来的方法,以及将这些类(对象)的实例与相应表中的行关联起来的方法。它包括一个透明地同步对象及其相关行(称为工作单元)之间的所有状态变化的系统,以及一个用用户定义的类和它们之间定义的关系来表达数据库查询的系统。
ORM是与SQLAlchemy表达式语言相对应的,ORM是在其基础上构建的。SQL表达式语言在SQL表达式语言教程(1.x API)中介绍的SQL表达式语言是不加意见地直接表示关系型数据库的原始构造的系统,而ORM则呈现了一种高层次和抽象化的使用模式,它本身就是表达式语言的应用实例。
虽然ORM和表达式语言的使用模式有重合之处,但其相似之处比起初看起来更肤浅。其中一种是从用户定义的领域模型的角度来处理数据的结构和内容,该模型从其底层存储模型中透明地持久化和刷新。另一种是从文字模式和SQL表达式的角度来处理它,这些表达式被明确地组成了由数据库单独消费的消息。
一个成功的应用程序可能只使用对象关系映射器来构造。在高级情况下,用ORM构建的应用程序可能会在某些需要特定数据库交互的领域直接偶尔使用表达式语言。
下面的教程是以doctest格式进行的,也就是说,每一行>>>代表你可以在Python命令提示符下键入的内容,下面的文字代表预期的返回值。
Connecting
在本教程中,我们将使用一个仅有内存的SQLite数据库。为了连接,我们使用[create_engine()
]
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)
echo
标志是设置SQLAlchemy日志的捷径,它是通过Python的标准logging
模块来实现的。启用它后,我们将看到所有生成的SQL。如果希望生成的输出少一些,可以将其设置为False
。
即:echo = True|False:是否打印SQL语句
create_engine()
的返回值是Engine
的一个实例,它代表了数据库的核心接口,通过term-dialect进行调整,处理数据库的细节和DBAPI的使用。在这种情况下,SQLite方言将向Python内置的sqlite3
模块解释指令。
第一次调用类似Engine.execute()
或Engine.connect()
这样的方法时,Engine
会建立一个真正的DBAPI连接到数据库,然后用它来发出SQL。在使用ORM的时候,我们一般不会直接使用Engine
创建后,而是由ORM在幕后使用,我们很快就会看到。
连接mysql
from sqlalchemy import create_engine
engine = create_engine(
''mysql+pymysql://[用户名]:[密码]@[HOST]:[port]/[database]',
echo = True
)
例如:
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://root:12345@localhost:3306/db_sqlalchemy_test',
echo=False
)