超好用的SQLAlchemy
SQLAlchemy是一个python语言实现的的针对关系型数据库的orm库。 可用于连接大多数常见的数据库,比如Postgresql、MySQL、SQLite、Oracle等。
使用感受
我自己是从PyMysql+MySQL过渡到SQLAlchemy+Posygresqls。MySQL过渡到Posygresqls这里暂且不提,友友们可以根据自己的需求使用。单就SQLAlchemy来说最大的感受就是简单,灵活,代码量少。两个字:舒服!
优点
**
1.可读性:ORM以最简单的形式建模数据。表的字段就是这个类的成员变量,ORM使数据库结构文档化、可视度更高。
2.可用性:ORM的避免了繁琐、冗余、五花八门的SQL语句。简单灵活的接口方法极大的降低了学习成本,也降低了开发中的时间开销,提高了程序与数据库的友好性。
3.可维护性:SQLAlchemy的高度统一性保证了在数据表结构甚至数据库发生改变时,极大的减少了相应的代码修改。**
环境配置
pip install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
代码
main.py
from sqlalchemy import Column,Integer,String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker Base = declarative_base() #ORM模型 #数据库的表与此类对应起来。SQLAlchemy的核心就是通过类的映射来操作数据库表 class Person(Base): __tablename__ = 'person' id = Column(Integer, primary_key=True) name = Column(String(250), nullable=False) engine = create_engine('postgresql://用户名:密码@localhost:5432/数据库名') #创建数据库引擎 Base.metadata.create_all(engine) #创建数据库 session= sessionmaker(engine) #创建会话对象 dbsession=session() #打开会话对象 '''增''' #增加单个 def addOnly(): dbsession.add(Person(id=10,name='小明')) dbsession.commit() #增加多个 def addMang(): lis=[] name_lis=['张','李','王','曾','徐'] for i in range(5): lis.append(Person(id=i,name=name_lis[i])) dbsession.add_all(lis) dbsession.commit() from sqlalchemy.sql import and_ , or_ '''删''' def deletePersion(): dbsession.query(Person).filter(and_(Person.id==10,Person.name=='小明')).delete() dbsession.commit() '''查''' def findPersion(): for i in dbsession.query(Person).all(): print(i.id,i.name) '''改''' def modifyPersion(): dbsession.query(Person).filter(Person.id==1).update({'name':'aaaa'}) dbsession.commit() dbsession.close()
献上从数据库中导出表为orm模型代码“sqlacodegen”库
pip install sqlacodegen sqlacodegen postgresql://用户名:密码@localhost:5432/数据库名 > model.py
献上数据库版本控制方法“alembic”库
pip install alembic
使用方法
alembic init alembic #初始化
配置
alembic.ini sqlalchemy.url = postgresql://用户名:密码@localhost:5432/数据库名
env.py
import os import sys # 把当前项目路径加入到path中 sys.path.append(os.path.dirname(os.path.dirname(__file__))) import main target_metadata = main.Base.metadata
alembic revision --autogenerate -m "first commit" #提交版本 alembic upgrade head #将新版本更新到数据库中 alembic downgrade 指定版本号 #降低版本
如有任何问题,欢迎在下方留言,谢谢!