sqlalchemy的接口

from sqlalchemy import create_engine
# from sqlalchemy.pool import NullPool
from sqlalchemy.orm import sessionmaker


class API(object):

    '''
    定义orm框架的api接口,实现增删改查的功能
    '''

    # 监控模型类对象生成过程,并且对mysql
    # 数据库的创建进行判断,生成mysql数据库中的数据表
    # 对象初始化
    def __init__(self):

        # args = 'mysql://root:shen123@localhost/test?charset=utf8'
        args = 'mysql+pymysql://root:shen123@localhost:3306/test1'
        # 创建数据库链接引擎
        engine = create_engine(args)
        # 返回数据库会话
        Session = sessionmaker(bind=engine)
        # 创建数据库会话对象
        self.session = Session()

    # 增加
    def add(self,db,value):

        # 对模型类进行实例化对象
        obj = db()
        # 保存到数据库,异常回滚
        obj.name = value
        try:
            # 保存到数据库
            self.session.add(obj)
            # 保存对象后进行提交
            self.session.commit()
        except:
            # 出现异常回滚
            self.session.rollback()

    # 删除
    def dele(self,db,**kwargs):

        # 实例化对象
        obj = db()
        # 对接受到的不定长参数进行判断
        if kwargs is not None:
            # 对传递进来的字段条件进行遍历,判断是否正确
            for key in kwargs.keys():
                # 获取模型类对象的属性,如果属性存在则返回为None,不存在返回Notexist
                resu = getattr(obj, key, 'Notexist')
                # 判断返回值返回的结果
                if resu == 'Notexist':
                    # 返回不存在的模型类字段并推出
                    return ('%s is not defined' % key)
        # 根据模型类的字段值进行查询,没有结果返回为None,有结果会返回对象地址
        res = self.session.query(db).filter_by(**kwargs).first()
        # 对查询结果进行判断,如果有数据向下执行,没有数据则返回不催在
        if res:
            try:
                # 对查询的对象进行删除操作
                self.session.delete(res)
                # 删除对象后进行提交
                self.session.commit()
                # 返回删除成功
                return 'Success'

            except:
                # 删除异常进行事务回滚
                self.session.rollback()
        else:
            # 返回不存在
            return 'NoExist'

    # 清空数据表
    def dele_all(self,db):

        # 查询所有的对象
        ret = self.session.query(db).all()
        # 如果存在数据
        if ret:
            # 遍历对象列表
            for obj in ret:
                try:
                    # 删除对象
                    self.session.delete(obj)
                    # 删除后提交保存
                    self.session.commit()
                except:
                    # 异常回滚
                    self.session.rollback()
                    return 'False'
        else:
            # 不存在数据返回为空
            return 'Null'

    #改
    def change(self,db,content,**kwargs):

        # 实例化对象
        obj = db()
        # 对接受到的不定长参数进行判断
        if kwargs is not None:
            # 对传递进来的字段条件进行遍历,判断是否正确
            for key in kwargs.keys():
                # 获取模型类对象的属性,如果属性存在则返回为None,不存在返回Notexist
                resu = getattr(obj, key, 'Notexist')
                # 判断返回值返回的结果
                if resu == 'Notexist':
                    # 返回不存在的模型类字段并推出
                    return ('%s is not defined' % key)
        # 对更改数据的查询和更改进行异常判断
        try:
            # 查询要更新的 对象模型是否存在,存在则返回对象地址,不存在返回None
            ret = self.session.query(db).filter_by(**kwargs).first()
            # 更新对象的属性内容
            ret.name = content
            # 更新后提交保存人数据库
            self.session.commit()
            return 'OK'
        except:
            # 出现异常,事务回滚
            self.session.rollback()


    # 按条件查询一条数据
    def find(self,db,**kwargs):

        # 实例化对象
        obj = db()
        # 对接受到的不定长参数进行判断
        if kwargs is not None:
            # 对传递进来的字段条件进行遍历,判断是否正确
            for key in kwargs.keys():
                # 获取模型类对象的属性,如果属性存在则返回为None,不存在返回Notexist
                resu = getattr(obj, key, 'Notexist')
                # 判断返回值返回的结果
                if resu == 'Notexist':
                    # 返回不存在的模型类字段并推出
                    return ('%s is not defined' % key)
        try:
            # 查询要更新的 对象模型是否存在,存在则返回对象地址,不存在返回None
            res = self.session.query(db).filter_by(**kwargs).first()
        except:
            # 出现异常事务回滚
            self.session.rollback()
        # 如果查询到了对象
        if res:
            # 获取到的对象调用__dict__以字典类型键值对的格式返回属性
            su = res.__dict__
            # 删除对象地址内存键值对
            su.pop('_sa_instance_state')
            # 打印输出对象
            print(su)
            # 以字典的形式返回对象的属性
            return su

        else:
            # 否则返回不存在
            return 'NoExist'

    # 查询所有的对象
    def find_all(self,db):

        # 查询所有的数据
        try:
            # 查询所有的数据
            ret = self.session.query(db).all()
            # 对查询到的数据进行判断为空返回null,有数据返回的是一个对象列表
            if ret:
                # 对模型对象列表进行遍历
                for obj in ret:
                    # 获取到的对象调用__dict__以字典类型键值对的格式返回属性
                    su = obj.__dict__
                    # 删除对象地址内存键值对操作
                    su.pop('_sa_instance_state')
                    # 以字典的格式输出每个对象的所有属性
                    print(su)
                    # 返回遍历的模型对象的属性
                return "OK"
            else:
                # 否则返回为空
                return 'Null'
        except:
            # 出现异常事务回滚
            self.session.rollback()




    # # 由本类创建的对象执行完后自动执行本函数下的代码
    # def __del__(self):
    #
    #     try:
    #         # 向数据库提交内容
    #         self.session.commit()
    #     except:
    #         # 出现异常事务回滚
    #         self.session.rollback()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy是一个开源的Python SQL工具包和对象关系映射(ORM)库。它提供了一种操作关系型数据库的高级抽象层,并且支持多种数据库后端。通过使用SQLAlchemy,我们可以以面向对象的方式编写数据库查询和操作。 在SQLAlchemy中,Engine是一个重要的概念。它代表了与数据库的连接,它负责管理数据库连接池,并为我们提供执行SQL语句的接口。通过Engine,我们可以执行SQL查询、插入、更新和删除等操作。 安装SQLAlchemy非常简单,只需要使用pip命令进行安装即可。例如,可以使用以下命令安装SQLAlchemy: pip install sqlalchemy 在使用SQLAlchemy进行开发时,我们可以使用两种方法来构建model。一种是手动定义每个字段和关系,另一种是使用autoload模式。autoload模式可以根据数据库表的字段结构自动生成model的Column,并自动加载到对应的model中。 下面是一个使用autoload模式编写model映射的示例代码: from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.sql.schema import Table engine = create_engine("sqlite:///testdb.db") Base = declarative_base() metadata = Base.metadata metadata.bind = engine class Employee(Base): __table__ = Table("employees", metadata, autoload=True) 通过这种方式,我们可以很方便地进行单表的CRUD操作,包括创建、读取、更新和删除数据。 以上是关于SQLAlchemy的简要介绍和使用方法,如果您对具体的教程感兴趣,可以参考中的SQLAlchemy 1.4 / 2.0 Tutorial,其中包含了更详细的内容和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SQLAlchemy简明教程](https://blog.csdn.net/stone0823/article/details/112344065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [SQLAlchemy使用教程](https://blog.csdn.net/m0_59092234/article/details/126080103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值