2021-11-08

sqlachemy orm框架学习:

sqlachemy是python语言中用于开发orm框架的库。它的底层是基于MySQL,pymysql等的封装。

part one:生成表结构:


import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String

engine =create_engine('mysql+pymysql://root:123456@localhost/oldboydb',encoding='utf-8',echo=True)     
                       #create_engine:连接数据库(相当于声明一个socket连接实例)
                       # sqlalchemy底层是基于mysql、pymysql等的封装,支持MySQL等包
                       #选择用什么底层(mysql+pymysql);用户名:密码;主机;数据库;字符集;
                       #echo=True:打印所有信息
Base =declarative_base()    #declarative_base():生成orm基类(内置类)

class User(Base):                   #定义实体类(声明表结构);User(子类)继承了Base(父类)
    __tablename__='test'    #表名
    id =Column(Integer,primary_key=True)   #字段id:整形,主键 Column是sqlalchemy的方法
    # age =Column(String(32))     #字段age
    name =Column(String(32))    #字段name
    password =Column(String(64))    #字段password
    
    def __repr__(self):                         #调用该实体类时,定义返回值为....
        return '%s name:%s'%(self.id,self.name)

Base.metadata.create_all(engine)   
#orm基类.metadata.create_all:创建表结构(所有被继承对象(父类调子类));engine:socket连接实例; 
                                            
    
不同于pymysql(生成cursor游标后即可调用原生sql指令),sqlachemy是通过sessionmaker方法生成实例对象,再去调用其内置方法。所以一旦框架搭建完成,效率应该是大幅提升的。

part two:生成实例对象,添加属性
from sqlalchemy.orm import sessionmaker     #sessionmaker:内置很多方法
Session_class =sessionmaker(bind =engine)   
#bind:绑定连接实例对象engine(注:此时Session_class是一个类,而不是实例对象(不同于cursor方法,直接生成实例对象)
Session =Session_class()    #调用类生成实例对象(相当于cursor =connection.cursor())

user_obj1 =User(name ='clex',age=127889,password ='alex123')     #生成实体对象

Session.add(user_obj1)                   #添加实体对象至表格
print(user_obj1.name,user_obj1.age,user_obj1.password)

Session.commit()
##上传保存(注:此part自动开启事务,不保存则丢失)
#pymysql的.commit()也通过实例对象调用,而不是通过生成的游标实例调用。这与sqlalchemy相似又不相似。

part three:增删改查

#session.query(Models1, Models2,...):查询的实体类(表); 返回值为列表
#filter_by与filter_by:限定条件不同
data =Session.query(User).filter_by(name='alex').first()    
#query().filter_by:限定查询(通过等值限定);first()/all():查询范围

data =Session.query(User).filter(User.id>2).filter(User.id<7).all()   #query().filter:限定查询(通过条件限定,可多重),first()/all():限定范围

print(Session.query(User).filter_by(name='alex').all()) 
print(data[0].name,data[0].password)    #data为列表
print('--------------------------------------')
print(Session.query(User).filter(User.name.in_(['alex','blex','clex'])).count())    #.in_():按字头查询;.count():计数,统计

data[0].name='jim'                      #通过列表下标索引可直接修改
data[0].password='j123'
print(data[1].name,data[0].password)
print(data[4].name,data[0].password)
print(data[20].name,data[0].password)   #超出索引值报错
Session.commit()                        #上传保存(自动开启事务,不保存则丢失)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值