python4 sqlalchemy模块学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python4 sqlalchemy模块学习相关的知识,希望对你有一定的参考价值。

首先我们学习如何创建一个表!

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
#创建一个实例,mysql+pysql 是说sqlalchemy利用Pymysql底层支持
engine = create_engine("mysql+pymysql://root:[email protected]/mysql",
                                    encoding=utf-8, echo=True)
Base = declarative_base() #生成orm基类
#创建user类的时候继承该基类,column我就是帮你自动转换成mysql的格式
class User(Base):
    __tablename__ = user4 #表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))

Base.metadata.create_all(engine) #创建表结构
#这样我们就完成了在mysql下创建了 id 为主键 ,name,password 的名为 User4的表
Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例

Session = Session_class() #生成session实例
 
 
user_obj = User(name="alex",password="alex3714") #生成你要创建的数据对象
print(user_obj.name,user_obj.id)  #此时还没创建对象呢,不信你打印一下id发现还是None
 
Session.add(user_obj) #把要创建的数据对象添加到这个session里, 一会统一创建
print(user_obj.name,user_obj.id) #此时也依然还没创建
 
Session.commit() #现此才统一提交,创建数据
#综合起来就是 创一个表结构后 往里面输入数据 放在第一写法中!!!!!!

 

echo=True 会显示大量的结果,如果我们去掉的话那么则不print大量的数据在面板上了!

技术分享

查询我们会发现创建成功!

另外一种创建方式,不过不常用!


from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
#相当于创建一个实例,开始创建
metadata = MetaData()
#利用Table,传入metadata,之后利用 Column
user = Table(user, metadata,
            Column(id, Integer, primary_key=True),
            Column(name, String(50)),
            Column(fullname, String(50)),
            Column(password, String(12))
        )
#创建一个类
class User(object):
    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password
 
mapper(User, user) #二者联系在一起创建一个表!!!

 

事实上,我们用第一种方式创建的表就是基于第2种方式的再封装。

 

2.创建完之后我进行学习增删改查!

查询:

#查询在User表中 name=a 的返回

my_user = Session.query(User).filter_by(name="a").first()
print(my_user)

我们获得结果是这样的:<__main__.User object at 0x105b4ba90> 这是一个对象 我们如何能清楚的看见内容呢?在上面第一段代码中我们创建的类里面添加一个这样的函数我们就会格式化的输出 他的名字 以及 密码

def __repr__(self):
    return "<User(name=‘%s‘,  password=‘%s‘)>" % (
        self.name, self.password)

查询所有的数据

print(Session.query(User.name,User.id).all() ) #查以一个数据我们用的是first

多条件查询

objs = Session.query(User).filter(User.id>0).filter(User.id<7).all()  #查询所有大于0小于7的数据并返回给objs

objs = Session.query(User).filter_by(id=number).all() #查询等于数字Number的数据并返回给objs

修改

my_user = Session.query(User).filter_by(name="alex").first()
 
my_user.name = "Alex Li"
 
Session.commit()

回滚:

my_user = Session.query(User).filter_by(id=1).first()
my_user.name = "Jack"
 
 
fake_user = User(name=Rain, password=12345)
Session.add(fake_user)
 
print(Session.query(User).filter(User.name.in_([Jack,rain])).all() )  #这时看session里有你刚添加和修改的数据
 
Session.rollback() #此时你rollback一下
 
print(Session.query(User).filter(User.name.in_([Jack,rain])).all() ) #再查就发现刚才添加的数据没有了。
 
# Session
# Session.commit()

统计:

#统计一Ra开头的所有数据!返回其数量!

Session.query(User).filter(User.name.like("Ra%")).count()

分组:

统计name的数量分组并打印!

from sqlalchemy import func
print(Session.query(func.count(User.name),User.name).group_by(User.name).all() )

 


以上是关于python4 sqlalchemy模块学习的主要内容,如果未能解决你的问题,请参考以下文章

python4-反射_类

python4

Python 学习笔记 - sqlAlchemy(初稿)

SQLAlchemy学习-11.结合 dataclass 使用

Flask 学习-94.Flask-SQLAlchemy 按日期时间查询

PYTHON进阶