Fork me on GitHub

Python系列文章-SQLAlchemy库使用

目录

  • 背景

  • 第一部分 第一个项目

  • 第二部分 总结

  • 参考文献及资料

背景

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

  • ORM 框架主要是根据类和数据库表之间的映射关系,帮助程序员自动实现对象与数据库中数据之间的互相转化

第一部分 ORM框架

https://blog.51cto.com/u_3664660/3217110

ORM(Object Relational Mapping)对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换,简单点说就是将数据库里面的一条数据映射成一个对象,要对某条数据增删改查时直接操作对应的对象即可。这样带来的好处是不言而喻的,比如要insert一条记录,原始的做法是这样:

1
2
INSERT INTO `user` (`id`, `account`, `password`) 
VALUES (1, 'it2048', '123456');

复制

这样做会有一些问题:

  1. 手写SQL很费时,遇到几十上百个字段的表,一句insert要耗费半天精力。
  2. 每次都要看着数据库客户端,不然属性名称没法写。
  3. 容易把字段的类型弄错,varchar类型的属性传入了int。
  4. 容易写出SQL注入漏洞。

第二部分 sqlalchemy使用

https://blog.csdn.net/aimill/article/details/81531499

https://www.cnblogs.com/dachenzi/p/10569495.html

https://blog.csdn.net/fuchen58/article/details/81099711

2.1 数据库类型

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作.

1
2
3
4
5
6
7
8
9
10
11
12
13
MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>

cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html

https://www.jianshu.com/p/f28304e0e3a7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test",echo=True)
metadata=MetaData(engine)

user=Table('user',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(20)),
Column('fullname',String(40)),
)
address_table = Table('address', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', None, ForeignKey('user.id')),
Column('email', String(128), nullable=False)
)

metadata.create_all()

第三部分 使用

https://www.html.cn/script/python/216427.html

https://www.cnblogs.com/ccorz/p/5711955.html

案例:

https://www.pythonsheets.com/notes/python-sqlalchemy.html

https://www.jianshu.com/p/5832c79cb9e1

第四部分 事务管理

SQLAlchemy 的 session 是用于管理数据库操作的一个像容器一样的东西. 模型实例对象本身独立存在, 而要让其修改(创建)生效, 则需要把它们加入某个 session 。同时你也可以把模型实例对象从 session 中去除。

被 session 管理的实例对象:

session.commit() 直接将数据库内存中的数据提交到数据库,此操作会内部调用session.flush(),其余的事务可以访问最新的数据;

session.rollback() 是回滚当前事务的变更数据操作;

session.flush() 的作用是在事务管理内与数据库发生交互, 对应的实例状态被反映到数据库,比如自增 ID 被填充上值,但是数据库中当前事务的数据值并未更新上;相当于预提交,等于提交到数据库内存,还未写入数据库文件;deletions and modifications to the database as INSERTs, DELETEs, UPDATE;

session.merge(obj) 查询更新操作;就是更新之前先查询,如果没有自动插入;

参考文献及资料

1、官网介绍:https://www.sqlalchemy.org/;https://docs.sqlalchemy.org/en/14/dialects/index.html

0%