Python SqlAlchemy数据库持久化使用方法

来源:互联网 发布:数据库系统的二级映射 编辑:程序博客网 时间:2024/06/09 23:40

SqlAlchemy版本:1.1.11
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423


数据持久化是常用的开发技术。具体有点请参考百度百科:请点击

Python的数据库ORM框架是数据持久层框架。这只是其中一种框架,还有其他的框架,请参考

总的来说,在实际开发中,需要不停的对数据库进行连接和操作,最基本的就是连接数据库,然后通过sql语句进行增删改,提交事务,关闭连接。这当然是最入门的做法。性能也是最差的。
这时候就引入了数据持久层的方法。


本文介绍python中最流行的SQLAlchemy框架的使用。
安装:直接用pip install SQLAlchemy即可
使用方法:
创建链接:

from sqlalchemy import create_engineengine=create_engine('sqlite:////MyDB.sqlite3',echo=True)

这里写图片描述
这里的创建是告诉SQLAlchemy你的数据库文件的路径。这里sqlite:////MyDB.sqlite3,py文件和MyDB.sqlite3是同一个目录下,如果不同目录,需要写上路径。
echo=False(True),在运行py文件的时候是不显示(显示)Sql执行情况。这个可以自己试试。
这里列出一系列的数据库链接方式:
这里写图片描述
例:

mysql://root:pass/testroot是用户名 pass密码 test数据库

明确了路径和相关的数据库名之后,就是建立会话。也可以理解为sql的游标

from sqlalchemy.orm import sessionmakerDBSession = sessionmaker(bind=engine)session = DBSession()

然后就是创建对象类

from sqlalchemy.ext.declarative import declarative_baseBase=declarative_base()

因为持久化都是将数据库的字段转化成代码里面类的属性来表示的。

创建表

from sqlalchemy import create_engine,Column,String,Integerclass Mybase(Base):    #表名    __tablename__ ='mycars'    #字段,属性    myid=Column(String(50), primary_key=True)    price=Column(String(50))

创建对象之后,但是在数据库里面还没生成该表。可以自定义一个方法:

def CreatDb():    #创建表    Base.metadata.create_all(engine)
def delDb():    #删除表    Base.metadata.drop_all(engine)

添加数据

dt=Mybase(myid='aaa',price="aaa")session.add(dt)session.commit()

修改数据

#根据新增后再修改dt.price='aaaaa'#提交数据库session.commit()
#查找符合条件数据再修改,filter_by是一个list,first()表示第一个ModifyDt=session.query(Mybase).filter_by(myid='asd').first()#修改数据ModifyDt.price='ccccc'#提交数据库session.commit()

查询数据
查询数据是用filter_by,上一代码就是查询后再修改数据。
如果多条件查询,使用多次filter_by即可

querydt=session.query(Mybase).filter(Mybase.myid == 'asd').filter(Mybase.price == 'bbbb')for i in querydt:    print(i.myid)

全部代码:

from sqlalchemy import create_engine,Column,String,Integerfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_base#建立链接engine=create_engine('sqlite:////Mydb.sqlite3',echo=False)#建立会话DBSession = sessionmaker(bind=engine)session = DBSession()Base=declarative_base()class Mybase(Base):    #表名    __tablename__ ='mycars'    #字段,属性    myid=Column(String(50), primary_key=True)    price=Column(String(50))def CreatDb():    #创建表    Base.metadata.create_all(engine)def delDb():    #删除表    Base.metadata.drop_all(engine)#创建表    CreatDb()#添加数据dt=Mybase(myid='aaa',price="aaa")session.add(dt)session.commit()#修改数据dt.price='aaaaa'session.commit()#查询后修改ModifyDt=session.query(Mybase).filter_by(myid='asd').first()ModifyDt.price='bbbb'session.commit()#多条件查询,这里注意的是filter_by和filter的区别,filter可以多表查询。比较运算符也不一样。filter必需带表名querydt=session.query(Mybase).filter(Mybase.myid == 'asd').filter(Mybase.price == 'bbbb')for i in querydt:    print(i.myid)

运算结果:
这里写图片描述

此外还有很多数据库操作。这个可以参考官方文档:请点击
注意:不同SqlAlchemy版本而且版本相差较大的,在语法上会有不同的区别。

原创粉丝点击