首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 插件系列之 SQLAlchemy

撰文编辑:Webshell1414

欢迎朋友圈各种姿势的分享

如需转载,请联系无极安全 微信号:wuji_security

前言

大多数的应用程序在开发之前都需要先进行数据库设计这一环节

如果写程序用MySQL-Python和程序交互,那是不是要写原生sql语句。如果进行复杂的查询,那sql语句就要进行一点一点拼接

熟悉 Java 的朋友们一定使用过 Hibernate 或 MyBatis 吧,这类的框架称为对象关系映射 ORM 框架,它将对数据库的操作从繁琐的 SQL 语言执行简化为对象的操作。Python 中也有类似的 ORM 框架,叫 SQLAlchemy。

SQLAlchemy

那么什么是SQLAlchemy,又怎么用呢

SQLAlchemy是Python最广泛使用的 ORM 框架 , 很多人可能还不理解ORM

ORM(object relational mapping)是在基于不同的数据结构和不同的系统类型之间进行传递和转换数据的计数。简而言之,SQLAlchemy-ORM 可以把大量的不同类型的数据库中的数据,转换成 Python 对象的集合。 也就是说,SQLAlchemy-ORM将连接的数据库映射出来当成一个Python的对象进行操作,然后使用数据API执行SQL并获取执行结果。

怎么理解呢,就是在一个数据库里,存在一张表就在Python声明一个映射的对象

例如:想要在数据库中创建这样一张User用户表

先不管里面的数据,那么这张User表就是存在三个字段:Id,Username和Password

ORM

object 对象

relational 关系

mapping 映射

那么就要声明一个表的关系对象

SQLAlchemy连接数据库

Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

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

ORM解决中文编码问题 sqlalchemy 默认使用latin-1进行编码。所以当出现中文时就会报错误

解决方法:

在连接数据库的时候直接指定字符编码:

SQLAlchemy创建表

那么结合起来创建一张表:

当前只是声明映射关系和在脚本中声明这个表对象,还没在数据库中真正的的创建这张Users表,还要添加这个语句运行后才会在数据库真正创建一张表:

运行显示创建成功 :

这时查看数据库就可以看到一张test数据库下创建了一张users表 :

声明:使用 create_all函数创建一个表时,只用当前不存在的表会进行创建,当存在的表需要修改表结构时,只能将整个表drop掉重新创建,不够相关的数据也会被删除,一般需要修改的时候都用migrate插件进行数据库迁移

SQLAlchemy的增删查改

要操作数据库,首先要建立与数据库的会话,下面第一行是先生成与该数据库相关的Class类 ,之后用这个Class生成对象进行操作

接下来的增删查该操作都是根据依据这个session对象进行操作

可见,关键是获取session,然后把对象添加到session,最后提交并关闭。session对象可视为当前数据库连接。

这时数据库就会存在一条信息了 ,这里先不看结果,我们查询看一下有没有成功

查的方法也简单

ret -ret2 执行返回的结果为一个list,列表查询遍历即可查看内容,ret3返回的是元组,ret4返回的SQL语句

整合查询代码,运行

运行结果如下:

其他条件查询一览

删除则要依据查的基础上,需要先将删除的数据先提前出来,再用delete()进行删除,最后提交到数据库中

修改数据和删除类似,一样要需要在查的基础上,需要先将修改数据先提前出来,再用进行修改,最后提交到数据库中

也可以像对象属性重新赋值一般进行修改

综合起来脚本:

前沿的安全趋势、安全技术、产品、观点、评论

思源安全团队解决方案,安全案例

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180312G10PY300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券