发表于 2024-5-16 12:33:38

SQLAlchemy详解

一、SQLAlchemy介绍

  SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用步伐开发人员提供 SQL 的全部功能和机动性。
  SQLAlchemy支持SQLite、PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server等多种数据库。
二、SQLAlchemy安装

  https://img2024.cnblogs.com/blog/751754/202404/751754-20240406233756919-1532420194.png
  我安装的版本是:SQLAlchemy==2.0.29。注意SQLAlchemy2.x以上的版本和1.x版本差别还是挺大的,注意版本。
  因为SQLAlchemy不能直接操作数据库,还必要python中的pymysql第三方库,所以还必要安装pymysql
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240406233717644-157234172.png
  PyMySQL==1.1.0.
三、创建测试数据库

  创建一个用于测试的数据库
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240406234005250-290206865.png
  此中sqlalchemydb就是测试数据库
四、封装SQLAlchemyDB类

  在python项目根目次下创建一个sqlalchemy_db.py文件,固然你也可以在其他目次下创建。此中内容如下:
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240406234458072-455423011.png
  说明1:该文件sqlalchemy_db.py的作用是封装一个SQLAlchemy的类,为实例化sqlAlchemy对象做准备
  说明2:self.engine是连接数据的引擎设置,只有设置了engine,我们才能通过sqlalchemy对象操作数据库
  说明3:self.session可以明白为数据库的操尴尬刁难象,我们对数据库的操作都是基于该session实现的。
  说明4:engine参数解释

[*]参数url:SQLAlchemy要连接的数据库地址,其格式为:数据库类型+数据库驱动://数据库用户:数据库密码@数据库地址:端口号/数据库名称?编码方式
[*]参数convert_unicode:按照指定的编码方式对字符串进行编码解码
[*]参数isolation_level:设置事务的隔离界别
[*]参数pool_recycle:设置采取链接的时间,单元毫秒
[*]参数pool_pre_ping:每次连接前预先ping一下
[*]参数pool_size: 链接池中保持数据库连接的数目,默认是5
[*]参数max_overflow :当链接池中的连接数不够用的时间,允许额外再创建的最大链接数目,默认是10
[*]pool_timeout:排队等数据库链接时的超时时间
  说明5: scoped_session创建的session是线程安全的。五、创建model模型

  5.1 SQLAlchemy支持的数据类型


[*]

[*]Integer:整形
[*]String:字符串
[*]Float:浮点型
[*]DECIMAL:定点型
[*]Boolean:bool
[*]Date:日期类型
[*]DateTime:日期+时间类型
[*]Time:时间类型
[*]Enum:枚举类型
[*]Text:文本类型
[*]LongText:长文本类型

  5.2 SQLAlchemy字段常用的约束



[*]

[*]default:默认值
[*]nullable:是否可空
[*]primary_key:是否为主键
[*]unique:是否唯一
[*]autoincrement:是否自动增长
[*]name:该属性在数据库中的映射字段

  5.3 创建测试的model.py文件

    在项目标根目次或者你必要的地方创建一个model.py文件,内容如下:
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240406234839883-1840980713.png
 
    说明1:为了测试效果,我们在这个model类中尽可能的多展示了不同字段的使用
    说明2:Base.metadata.create_all() 会将我们的模型自动映射到数据库中,固然也可以手动去数据库中创建表
    说明3:我们写好的这个model类暂时还没有使用呢 。
六、创建测试文件

  在项目根目次下或者你必要的地方创建一个test.py文件,内容如下:
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240406235059447-123478611.png
  这时我们在test.py中就只引入mysql_db和TestModel,其他的先不写,然后使用python test.py运行该脚本,就会发现我们的model模型,已经同步到数据库中了
   https://img2024.cnblogs.com/blog/751754/202404/751754-20240406235658305-173808808.png
七、添加测试数据

  7.1 单条添加数据

    修改test.py文件如下,然后python test.py实行
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407000230665-1028344953.png
    实行之后,我们去数据库查看结果如下:    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407000533416-1189217649.png    说明1:create_time,update_time,is_delete都是有默认值的字段,假如不设置,会自动显示默认值。
    说明2:money字段总长度时9位,但是可以少于9位,不能多于9位,小数部位不足时补0
  7.2 批量添加数据

    再来演示一下批量增加数据,代码如下还是在test.py中
     https://img2024.cnblogs.com/blog/751754/202404/751754-20240407000833211-138777258.png
    实行后的结果如下:
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407001129586-566002039.png
八、修改删除

  8.1 修改
    刚才已经演示了增加数据的代码,下面我们看一下修改,代码如下,还是在test.py文件中
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407001447972-1223491926.png
    查看一下数据库
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407001623735-2036329982.png
  8.2 删除

    可以看到姓名和性别已经修改成功。再来测试一下删除数据
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407001737276-469473380.png
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407001847986-992205272.png
    可以看出,数据库中已经没有id=1的数据了

九、查询

  在进行查询测试之前,先往数据库中添加一下测试数据
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002042311-916669200.png
   9.1 query关键字

    在做查询的时间我们通常query关键字,它雷同于SQL中select 关键字,query参数通常可以填写三类参数

[*]

[*]model模型对象:指定查找这个模型中所有的字段
[*]model模型对象中的属性:可以指定只查找某个model中的几个属性字段
[*]聚合函数:func.count(统计行的数目),func.avg(求均匀数),func.max(求最大值),func.min(求最小值),func.sum(求和)

    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002243116-602452036.png
    查看一下打印结果
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240406215157802-2006343002.png
    说明1:在做查询的时间 .first() 表示查询第一个满足条件的数据
    说明2:在做查询的时间 .all() 表示查询所有数据
    说明3:假如不是查询全部字段,只查询部分字段或者聚合函数的话,结果返回的是一个元组,通过下标取数据即可
  9.2 filter关键字

    过滤是数据提取的一个很告急的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现,常用的方法有

[*]

[*]相称: ==
[*]不相称: !=
[*]模糊查询:like(%xx$)
[*]包含:in_()
[*]不包含:~ in_() 注意 ~不是直接加在in前面的,注意看代码示例
[*]空:==None 或者 is_(None)
[*]不为空: !=None 或者 isnot(None)
[*]并且: and_()或者也可以使用逗号连接多个条件
[*]或者:or_()

    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002451444-1939149589.png
    打印结果如下:
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002619374-774876160.png
  9.3分页查询
    方式1:使用limit+offset实现
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002805045-1111703196.png
    查询结果为:
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407002951945-1010141783.png
    方式2:使用slice
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407003144966-2000151290.png
    输出结果为:
    https://img2024.cnblogs.com/blog/751754/202404/751754-20240407003239473-421694906.png
十、排序

   https://img2024.cnblogs.com/blog/751754/202404/751754-20240407003415323-1125704222.png
  输出结果为:
  https://img2024.cnblogs.com/blog/751754/202404/751754-20240407003516180-569309996.png
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SQLAlchemy详解