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)).rowcount 16 print(resinsert)
类方式操作
描述表结构时:
设置为主键【primary_key=True】、
是否可为空【nullable=False】、
外键【ForeignKey(“另一个表名.字段名”)】 #表名与字段名的点不可去掉
sqlalchemy 3 from sqlalchemy.ext.declarative declarative_base Column,Integer,String from 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_dong3 20 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值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。