ORM 与 SQLAlchemy 简介:
ORM 叫对象关系映射
,ORM 将对象转换成SQL,然后使用数据API执行SQL并获取执行结果
SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
#!/usr/bin/env python # -*- coding:utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, INTEGER, String from sqlalchemy.orm import sessionmaker print(sqlalchemy.__version__) engin = create_engine('mysql+pymysql://root:[email protected]:3306/llt_data',echo=True)#echo=True查看翻译好的sql Base = declarative_base()#生成一个sqlorm基类 #定义一个类(类==表,对象==行) class User(Base): __tablename__ = 'users'#声明表名 #列值 id = Column(INTEGER,primary_key=True,autoincrement=True) name = Column(String(10),index=True) fullname = Column(String(10)) password = Column(String(10)) __args__ = ( Index(id, name),#普通索引 uniqueContr(name,fullname)#组合唯一索引 ) #可以查看处理的对象具体值 def __repr__(self): return self.name Base.metadata.create_all(engin)#创建所有表结构 # Base.metadata.drop_all(engine)#删除所有表 ed_user = User(name='zc',fullname='zc1',password='123') print(ed_user) #触发sessionmake类的__call__方法,return得到Session实例,赋给变量session,就可以进行(session.)等等操作 MySession = sessionmaker(bind=engin) session = MySession() session.add(ed_user) #插入数据 session.add_all([ User(name='zc1',fullname='zc2',password='123'), User(name='zc1',fullname='zc2',password='123'), User(name='zc1',fullname='zc2',password='123'), User(name='zc1',fullname='zc2',password='123'), ]) session.commit()#每次必须提交 print(session.query(User).all()) for row in session.query(User).order_by(User.id): print(row) for row in session.query(User).filter(User.name.in_(['zc','zc1''zc2'])):#全匹配里面的 print(row) for row in session.query(User).filter(~User.name.in_(['zc4','zc1''zc2'])):#取反,不在这三个之中的数据拿出来 print(row) print(session.query(User).filter(User.name == 'zc').count())# 拿到数据,计数 #and_, or_必须导入 from sqlalchemy import and_, or_ for row in session.query(User).filter(and_(User.name == 'zc', User.fullname == 'zc zc2')):#and判断 print(row) for row in session.query(User).filter(or_(User.name == 'zc', User.fullname == 'zc zc2')):#or判断, print(row)