首页 > 数据库技术 > 详细

Python45 ORM思想框架SQLALchemy安装 操作 增删改查使用

时间:2019-06-18 23:11:58      阅读:123      评论:0      收藏:0      [点我收藏+]

复习

1.存储引擎***********

2.索引***********

3.慢日志查询---了解

4.权限--了解

 

今日内容:

SQlALchemy

1.安装

2.SQlAlchemy的操作

3.增删改查

详情:

1.安装SQlALchemy

 

#基本原理:
将代码装换成SQL语句执行
#安装
CMD终端执行:pip3  install  sqlalchemy;

#1.什么是SQLALchemy?
回顾之前的之前操作mysql,用pymysql,使用pymysql的前提条件:
      1.表需要在cmd终端先建好
      2.需要自己手动去写多条Sql语句
       
     改进:
       #在pycharm里面用类创建表
        类-------->表
       #上传数据
        实例化----->数据
       
       
        ------------------这种思想叫做ORM(Object Relationship Mapping)对象关系映射,基于这种思想开发的产品,Python比较出名的ORM框架:SQLALchemy
       
       
        #Object Relationship Mapping对象关系映射
        #ORM是一种抽象概念,SQLALchemy是基于这个框架的产品
 
 
 

2.SQlAlchemy的操作

#使用SQLAlchemy连接mysql
  底层使用PYMYSQl来进行操作的
#ps:
  1.字符编码:
    创建数据库的时候:
    create database db2 charset=utf8;
  engine=create_engine("mysql+pymysql://root:llx20190411@127.0.0.1:3306/db2",max_overflow=5)
1.创建表和删除表
#导入模块
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey,DateTime,Index,UniqueConstraint
from sqlalchemy.orm import sessionmaker
import datetime
#连接
engine=create_engine("mysql+pymysql://root:llx20190411@127.0.0.1:3306/db2",max_overflow=5)
#声明
Base=declarative_base()
#建表
class UserType(Base):
    __tablename__=‘usertype‘
    id=Column(Integer,autoincrement=True,primary_key=True)
    name=Column(String(32),nullable=False,default=‘‘)
class Users(Base):
    __tablename__=‘users‘
    id=Column(Integer,autoincrement=True,primary_key=True)
    name=Column(String(32),nullable=False,default=‘‘)
    extra=Column(String(32),nullable=False,default=‘‘)
    type_id=Column(Integer,ForeignKey(UserType.id))
    #加索引
    __table_args__ = (
                         UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘),# 联合唯一索引
                          Index (‘ix_name_extra‘, ‘name‘, ‘extra‘),
# 组合索引
)
#删表
#Base.metadata.drop_all(engine)
#会将所有当前执行文件中继承自Base类的类,生成表
Base.metadata.create_all(engine)
 
 
 

3.增删改查

#导模块
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey,DateTime,Index,UniqueConstraint
from sqlalchemy.orm import sessionmaker, relationship
import datetime
#连接
engine=create_engine("mysql+pymysql://root:llx20190411@127.0.0.1:3306/db2?charset=utf8",max_overflow=5)
#charset,不仅连接时需要配置,创建db2时在cmd上也要配置好#create database db2 charset=utf8;
#声明
Base=declarative_base()
#建表
‘‘‘
Usertype
id    title      xxoo
1     普通用户
row.xxoo : 多条记录对象
‘‘‘
class UserType(Base):
    __tablename__=‘usertype‘
    id=Column(Integer,autoincrement=True,primary_key=True)
    title=Column(String(32),nullable=False,default=‘‘)
‘‘‘
users
id     name   extra  type_id
1      zekai   nb      1
usertype = releationship(‘Usertype‘)
row.usertype
‘‘‘
class Users(Base):
    __tablename__=‘users‘
    id=Column(Integer,autoincrement=True,primary_key=True)
    name=Column(String(32),nullable=False,server_default=‘‘)
    extra = Column(String(32), nullable=False, server_default=‘‘)
    type_id=Column(Integer,ForeignKey(UserType.id))
    usertype=relationship(‘UserType‘,backref=‘llx‘)
    # __table_args__=(
    #     UniqueConstraint(‘id‘,‘name‘,name=‘uix_id_name‘),#联合唯一索引
    #     Index(‘ix_name_extra‘,‘name‘,‘extra‘)#组合索引
    # )
#会将当前执行文件中所有继承自Base类的类,生成表
def create_db():
    Base.metadata.create_all(engine)
# 会将当前执行文件中所有继承自Base类的类,删除表
def drop_db():
    Base.metadata.drop_all(engine)
#drop_db()
create_db()
#操作表中的数据
#----会话生成器
Session=sessionmaker(bind=engine)
session=Session()

#增加一条数据
# obj=UserType(title=‘普通用户‘)
# session.add(obj)
#增加多条数据
# session.add_all([
#     UserType(title=‘VIP用户‘),
#     UserType(title=‘VIP白银用户‘),
#     UserType(title=‘VIP黄金用户‘),
#     UserType(title=‘VIP黑金用户‘)
#
# ])
# session.commit()
# session.close()
#查询
#
#查询一条数据
# res=session.query(UserType).first()
# print(res.id,res.title)
#查询全部,返回的是一个列表,列表中套对象
# res=session.query(UserType).all()
# for i in res:
#     print(i.id,i.title)
 
#where 条件
# res=session.query(UserType).filter(UserType.title==‘VIP用户‘).all()
# for e in res:
#     #print(e.id,e.title)
#     print(res[0].title,res[0].id)
# res=session.query(UserType).filter(UserType.title==‘VIP用户‘).all()
# print(res)

#删除
# session.query(UserType).filter(UserType.id>3).delete()
#
# session.commit()
# session.close()
 
#修改
# session.query(UserType).filter(UserType.id==3).update({"title":"SVIP用户"})
#
# session.commit()
# session.close()

#####高级查询
#通配符like "%s%" "%s_"
#分组groud by....having
#限制级 limit page-1 office
#排序 order by desc asc
#in()在集合里
#between  and 闭区间()
#1between ...and ...
# res=session.query(UserType).filter(UserType.id.between(1,3)).all()
# # for j in res:
# #     print(j.id,j.title)

###in 操作 bool
# res = session.query(UserType).filter(UserType.id.in_([1,3])).all()
# for g in res:
#     print(g.id,g.title)
## not in
# res = session.query(UserType).filter(~UserType.id.in_([1,2])).all()
# for row in res:
#         print(row.id, row.title)
from sqlalchemy import and_,or_
###通配符
# res=session.query(UserType).filter(UserType.title.like (‘SVIP%‘)).all()
# for k in res:
#     print(k.id,k.title)
#
# session.commit()
# session.close()
 
###分组
from sqlalchemy.sql import func
# res=session.query(
#     Users.type_id,
#     func.max(Users.id),
#     func.min(Users.id)).group_by(Users.type_id>1).all()
# print(res)
# for i in res:
#     print(i.id)
# session.commit()
# session.close()
 
###连表操作left join
#1.查询某一个用户的用户类型
#方法一
# res=session.query(Users,UserType).join(UserType,isouter=True).all()
# print(res)
# for row in res:
#     print(row[0].id,row[0].name,row[1].title)
# session.commit()
# session.close()
#方法二
# res=session.query(Users).all()
# for row in res:
#     print(row.id, row.name, row.extra, row.usertype.title)
# session.commit()
# session.close()

### 2. 某一个类型下面的用户
### 第一种方法
# res = session.query(UserType).all()
# for row in res:
#     print(row.id, row.title, session.query(Users).filter(Users.type_id == row.id).all() )
# session.commit()
# session.close()
### 第二种方法
res = session.query(UserType).all()
for row in res:
    print(row.id, row.title, row.llx)
 
 
 
 
操作数据:
  
 正向查询 (通过主键查询)
 反向查询(通过外键查询)
  
pymysql与sqlalchemy的区别:
pymysql:
  DB first  :   先有DB, 在有后续的操作
sqlalchemy:  
  Code first :  先有代码, 通过代码创建DB

Python45 ORM思想框架SQLALchemy安装 操作 增删改查使用

原文:https://www.cnblogs.com/llx--20190411/p/11048262.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!