Python的数据库 *** 作(Sqlalchemy)

Python的数据库 *** 作(Sqlalchemy),第1张

概述ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要 *** 作数据库,数据库中的表

ORM 全称 Object Relational MapPing,翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要 *** 作数据库,数据库中的表或者表中的一条记录就可以直接通过 *** 作类或者类实例来完成。

sqlAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。支持多数据库,如MysqL、Oracle等

安装:

pip3 install sqlalchemy
使用步骤:
l   建立数据库连接
l   描述表结构(如果表不存在则会新建表)
l   得到数据库 *** 作游标(会话session)
l    *** 作数据表,提供了两种方法,分别为原生SQL语句 *** 作(execute)和类方式 *** 作
通过原生SQL语句 *** 作
 1 #导入必要模块 2 from sqlalchemy import create_engine 3  4 得到连接对象 5 参数:MysqL+pyMysqL://用户名:密码@地址/数据库名 6 添加参数 echo=True 表示打印日志到控制台 7 connal = create_engine("MysqL+pyMysqL://root2:proot2@192.168.1.175/dongdb",enCoding='utf-8') 8  9 查询10 resselect=connal.execute(select * from tb_dong"11 print(resselect.rowcount) 输出查询到的值12 print(resselect.fetchall()) 输出列表数据13 14 插入,输出影响行数15 resinsert=connal.execute(insert into tb_dong(namex,sex) values('%s','%s')"%(东小东xxF)).rowcount16 print(resinsert)
类方式 *** 作

描述表结构时:

设置为主键【primary_key=True】、

是否可为空【nullable=False】、

外键【ForeignKey(“另一个表名.字段名”)】 #表名与字段名的点不可去掉

 sqlalchemy 3 from sqlalchemy.ext.declarative  declarative_base Column,Integer,Stringfrom sqlalchemy.orm  sessionmaker 7 -------------得到连接对象--------------------10 12 connal = create_engine(,13                        enCoding=14 15 ----------------创建表,描述表结构-----------------------得到基类17 classal = declarative_base()18 class tb_dong3(classal):19     __tablename__ = tb_dong3"   表名为 tb_dong320     ID = Column(Integer,primary_key=True)   设置列为主键,默认不可为空且自增21     name = Column(String(15))22     password = Column(String(1523 24     def __repr__(self):25         return <ID=%s ; name=%s ; password=%s>"%(self.ID,self.name,self.password)26 27 提交创建表命令28 classal.Metadata.create_all(connal)29 30 ------------------ 游标获取  ------------------31 32 得到数据库游标33 cousession=sessionmaker(bind=connal)()34 35 --------------------插入数据------------------36 设置要插入的数据37 dataobj1=tb_dong3(name=dongdongpp东138 dataobj2=tb_dong3(name=dongpp东239 40 添加数据,参数可为列表:add([dataobj1,dataobj1])41 cousession.add(dataobj1)42 cousession.add(dataobj2)43 44 提交数据45 cousession.commit()46 47 --------------------查询数据---------------------48 filter(tb_dong3.ID>1)为条件查询49 多条件查询可以使用多个 filter 拼接50 查询所有:all()  查询一个:first()  计数:count()51 resdata=cousession.query(tb_dong3).filter(tb_dong3.ID>0).filter(tb_dong3.name==").all() 查询所有52 print(resdata) 输出全部查询结果53 print(cousession.query(tb_dong3).filter(tb_dong3.ID>0).filter(tb_dong3.name=="dong").count()) #查询所有54 print(len(resdata)) 得到查询结果的数量,相当于上面一句55 print(resdata[0].name) 取出name值56 57 -----------------  更新--------------------------58 先查询,然后赋值,然后提交59 resupdate=cousession.query(tb_dong3).filter(tb_dong3.ID==3).first()60 resupdate.name=ddddddddd"61 resupdate.password=xxxxxx62 63 64 -------------------  删除  -----------------------65 resdel=cousession.query(tb_dong3).filter(tb_dong3.ID==7366 cousession.delete(resdel)67 cousession.commit()
连表 *** 作:

重点在于需要描述两张表

 6  8 11 connal = create_engine(12                        enCoding=16 classal =17 建立tb_dong3表描述建立tb_dong2表描述 tb_dong2(classal):29     tb_dong230     ID = Column(Integer,1)">31     name = Column(String(1032     sex = Column(String(133 34     35         <ID=%s ; name=%s ; sex=%s>36 37 38 41 43 cousession=sessionmaker(bind=44 -------------------- 连表查询 ---------------------46 tb_dong3.name==tb_dong2.name 两表的name字段值相等得到单表数据(tb_dong2)resdata=cousession.query(tb_dong2).filter(tb_dong3.ID>0).filter(tb_dong3.name==tb_dong2.name).all()输出两张表的数据(tb_dong2,tb_dong3)50 resdata=cousession.query(tb_dong2,tb_dong3).filter(tb_dong3.ID>0).filter(tb_dong3.name==tb_dong2.name).all()51 print(resdata[0][0].name) 取出name值
总结

以上是内存溢出为你收集整理的Python的数据库 *** 作(Sqlalchemy)全部内容,希望文章能够帮你解决Python的数据库 *** 作(Sqlalchemy)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1189831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存