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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)