python的ORM之SQLAlchemy简单的增删改查

ORM之SQLAlchemy简单的增删改查

数据准备

m_user

create table m_user
(
    id         bigint       not null
        primary key,
    username   varchar(64)  null,
    avatar     varchar(255) null,
    email      varchar(64)  null,
    password   varchar(64)  null,
    status     int(5)       not null,
    created    datetime     null,
    last_login datetime     null
);

create index UK_USERNAME
    on m_user (username);
INSERT INTO testgroup.m_user (id, username, avatar, email, password, status, created, last_login) VALUES (1, '文章一', 'https://image-1300566513.cos.ap-guangzhou.myqcloud.com/upload/images/5a9f48118166308daba8b6da7e466aab.jpg', '[email protected]', '96e79218965eb72c92a549dd5a330112', 0, '2021-06-02 17:52:01', null);

INSERT INTO testgroup.m_user (id, username, avatar, email, password, status, created, last_login) VALUES (5, 'wu', 'wuwu', 'wuwuwu', 'wuwuwuwuwu', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');

m_blog

create table m_blog
(
    id          bigint       not null
        primary key,
    user_id     bigint       not null,
    title       varchar(255) not null,
    description varchar(255) not null,
    content     longtext     null,
    created     datetime     not null on update CURRENT_TIMESTAMP,
    status      tinyint      null
)
    charset = utf8mb4;
INSERT INTO testgroup.m_blog (id, user_id, title, description, content, created, status) VALUES (1, 1, '文章一', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-17 17:36:11', 0);
INSERT INTO testgroup.m_blog (id, user_id, title, description, content, created, status) VALUES (2, 1, '文章一2', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-17 17:36:11', 0);

查询

"""
@File    :   User.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""
from sqlalchemy import Column, BIGINT, VARCHAR, INT, DATETIME, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymysql
import time

# 这里一定要加pymysql.install_as_MySQLdb(),因为sqlalchemy使用的是MySQLdb,而MySQLdb是在python2.x才使用的
pymysql.install_as_MySQLdb()
# 创建对象的基类:
Base = declarative_base()


# 定义一个对象
class User(Base):
    # 表的名字
    __tablename__ = "m_user"

    # 接下来设计表结构
    id = Column(BIGINT, primary_key=True)
    username = Column(VARCHAR(64))
    avatar = Column(VARCHAR(255))
    email = Column(VARCHAR(64))
    password = Column(VARCHAR(64))
    status = Column(INT)
    created = Column(DATETIME)
    last_login = Column(DATETIME)


# 定义数据库信息
env = {"user": "xxxxxx", "passwd": "xxxxxx", "host": "rm-xxxxxx.mysql.rds.aliyuncs.com",
       "port": 3306, "db": "testgroup"}
# 由于参数是一个dict,所以入参加**,数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名,其中数据库驱动名称可以不添加,,如果不填写,则默认为MySQLdb,但是我们python3.x使用的驱动是pymysql,所以也可以使用
# url = "mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 然后记得将pymysql.install_as_MySQLdb()注释掉
url = "mysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 初始化数据库连接:
engine = create_engine(url)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象,对象可视为当前数据库连接
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id == 1).one()
# 多条件查询
user2 = session.query(User).filter(User.id == 5 and User.username == 'wu').one()
# 打印user对象的类型
print(type(user))
# 提取user对象的username
print(user.username)
# 提取user2对象的username
print(user2.username)
# user对象只是一个内存地址
print(user)
# 关闭链接
session.close()

结果


文章一
wu
<__main__.User object at 0x7fe2cd01bbb0>

新增

"""
@File    :   User.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""
from sqlalchemy import Column, BIGINT, VARCHAR, INT, DATETIME, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymysql
import time

# 这里一定要加pymysql.install_as_MySQLdb(),因为sqlalchemy使用的是MySQLdb,而MySQLdb是在python2.x才使用的
pymysql.install_as_MySQLdb()
# 创建对象的基类:
Base = declarative_base()


# 定义一个对象
class User(Base):
    # 表的名字
    __tablename__ = "m_user"

    # 接下来设计表结构
    id = Column(BIGINT, primary_key=True)
    username = Column(VARCHAR(64))
    avatar = Column(VARCHAR(255))
    email = Column(VARCHAR(64))
    password = Column(VARCHAR(64))
    status = Column(INT)
    created = Column(DATETIME)
    last_login = Column(DATETIME)


# 定义数据库信息
env = {"user": "xxx", "passwd": "xxxx", "host": "rm-xxxxxx.mysql.rds.aliyuncs.com",
       "port": 3306, "db": "testgroup"}
# 由于参数是一个dict,所以入参加**,数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名,其中数据库驱动名称可以不添加,,如果不填写,则默认为MySQLdb,但是我们python3.x使用的驱动是pymysql,所以也可以使用
# url = "mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 然后记得将pymysql.install_as_MySQLdb()注释掉
url = "mysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 初始化数据库连接:
engine = create_engine(url)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象,对象可视为当前数据库连接
session = DBSession()
# 定义一个user对象
new_user = User(id=23, username='ershisi', avatar='ershiyiyi', email='email', password='password', status=0,
                created=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), last_login=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 将定义的user对象添加到session中
session.add(new_user)
# 提交数据,如果不提交的话,会自动rollback
session.commit()
# 关闭链接
session.close()

检查数据库发现已经新增对应的记录

修改

"""
@File    :   User.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""
from sqlalchemy import Column, BIGINT, VARCHAR, INT, DATETIME, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymysql
import time

# 这里一定要加pymysql.install_as_MySQLdb(),因为sqlalchemy使用的是MySQLdb,而MySQLdb是在python2.x才使用的
pymysql.install_as_MySQLdb()
# 创建对象的基类:
Base = declarative_base()


# 定义一个对象
class User(Base):
    # 表的名字
    __tablename__ = "m_user"

    # 接下来设计表结构
    id = Column(BIGINT, primary_key=True)
    username = Column(VARCHAR(64))
    avatar = Column(VARCHAR(255))
    email = Column(VARCHAR(64))
    password = Column(VARCHAR(64))
    status = Column(INT)
    created = Column(DATETIME)
    last_login = Column(DATETIME)


# 定义数据库信息
env = {"user": "xxx", "passwd": "xxx", "host": "rm-xxx.mysql.rds.aliyuncs.com",
       "port": 3306, "db": "testgroup"}
# 由于参数是一个dict,所以入参加**,数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名,其中数据库驱动名称可以不添加,,如果不填写,则默认为MySQLdb,但是我们python3.x使用的驱动是pymysql,所以也可以使用
# url = "mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 然后记得将pymysql.install_as_MySQLdb()注释掉
url = "mysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 初始化数据库连接:
engine = create_engine(url)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象,对象可视为当前数据库连接
session = DBSession()
# 先筛选出用户,然后通过update方法来修改数据,update的参数是一个字典,里面对应的是每一个需要修改的字段和要修改成的值
session.query(User).filter(User.id == 23).update({"username": "wangbadan", "avatar": "nichousha"})
# 提交数据,如果不提交的话,会自动rollback
session.commit()
# 关闭链接
session.close()

检查数据库,发现id为23的数据的username和avatar已经被修改成了对应的值

删除

"""
@File    :   User.py    
@Modify Time      @Author    @Version
------------      -------    --------    
@Desciption:
"""
from sqlalchemy import Column, BIGINT, VARCHAR, INT, DATETIME, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymysql
import time

# 这里一定要加pymysql.install_as_MySQLdb(),因为sqlalchemy使用的是MySQLdb,而MySQLdb是在python2.x才使用的
pymysql.install_as_MySQLdb()
# 创建对象的基类:
Base = declarative_base()


# 定义一个对象
class User(Base):
    # 表的名字
    __tablename__ = "m_user"

    # 接下来设计表结构
    id = Column(BIGINT, primary_key=True)
    username = Column(VARCHAR(64))
    avatar = Column(VARCHAR(255))
    email = Column(VARCHAR(64))
    password = Column(VARCHAR(64))
    status = Column(INT)
    created = Column(DATETIME)
    last_login = Column(DATETIME)


# 定义数据库信息
env = {"user": "xxx", "passwd": "xxx", "host": "rm-xxx.mysql.rds.aliyuncs.com",
       "port": 3306, "db": "testgroup"}
# 由于参数是一个dict,所以入参加**,数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名,其中数据库驱动名称可以不添加,,如果不填写,则默认为MySQLdb,但是我们python3.x使用的驱动是pymysql,所以也可以使用
# url = "mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 然后记得将pymysql.install_as_MySQLdb()注释掉
url = "mysql://{user}:{passwd}@{host}:{port}/{db}".format(**env)
# 初始化数据库连接:
engine = create_engine(url)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象,对象可视为当前数据库连接
session = DBSession()
# 先筛选出用户,然后通过delete方法来删除
session.query(User).filter(User.id == 23).delete()
# 提交数据,如果不提交的话,会自动rollback
session.commit()
# 关闭链接
session.close()

检查数据库,id=23的数据已经被删除了

你可能感兴趣的:(Python,python,开发语言,后端)