目标
使用 SQLAlchemy 连接数据库,创建数据表
环境:
Python==3.6.8
SQLAlchemy==1.2.16
Psycopg2==2.7.6.1
连接与创建
使用 docker 启动一个 postgres 容器:
进入容器,使用命令创建一个名叫 mydb 的数据库:
现在可以访问下刚创建的数据库,验证有没有创建成功:
如果一切顺利,会返回该信息,并成功进入 mydb 数据库:
最后一行也可能是(意味着当前操作数据库用户非超级用户):
ORM 连接
要想使用 ORM,必须先实现类与表的映射。
在 SQLAlchemy 中,使用 Declarative 系统来处理这种映射关系。一般情况,我们只需创建一个基于此的一个基类,然后描述我们自己类与表的关系:
这个 就是我们要继承的基类,现在我们创建一个 User 类:
其中 是必须的,另外还需要一个为 的 。
Note
QLAlchemy 的 基类不会对映射表做任何约束,反而鼓励使用者根据实际情况自定义最小基类,比如可以这么做:
因为在 SQLAlchemy 的 中没有定义任何 、 等等这些约束,所以在继承的时候顺讯没有关系,也可以这么写:
但是如果继承的两个类含有同样的属性,那么根据 Python 该属性由写在前面的那个类决定。
当我们的类构建完之后,Declarative 系统会把所有的 对象替换成叫 的特殊 Python 访问器。这个过程就叫做 。
之后,该映射类就能给我们提供从数据库中持久化和载入 的 SQL 上下文。
除此之外,该映射类还是一个普通的 Python 类,我们依旧可以在里面定义属性,方法等等。
在 SQLAlchemy 的 系统对定义的映射类描述阶段,会创建一个 对象并和这个 对象一起构建一个 对象。这个 对象一般不会用到,但当我们需要的时候,能从中获取大量的映射信息。
对象是 集合的一员。使用 系统的时候, 对象属性能直接通过 属性访问。
现在,我们使用 SQLALchemy 连接数据库:
然后调用 方法,传入 对象:
我们去数据库看看有没有创建对应的表:
查看对应的表结构:
END
领取专属 10元无门槛券
私享最新 技术干货