• 技术文章 >后端开发 >Python教程

    Python下SQLAlchemy的简单介绍

    不言不言2018-10-23 16:44:24转载776
    本篇文章给大家带来的内容是关于php协成实现的详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,SQLAlchemy使用MIT许可证发行。它采用简单的Python语音,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。SQLAlchemy非常关注数据库的量级和性能。

    本节通过一套例子分析SQLAlchemy的使用方法。

    使用SQLAlchemy至少需要3部分代码,它们分别是定义表、定义数据库连接、进行增、删、改、查等逻辑操作。

    定义表的实例:

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String
    Base=declarative_base()
    class Accout(Base):
        __tablename__=u'accout'
        id=Column(Integer,primary_key=True)
        user_namr=Column(String(50),nullable=False)
        password=Column(String(200),nullable=False)
        title=Column(String(50))
        salary=Column(Integer)
    
        def is_active(self):
            #假设所有
            return True
    
        def get_id(self):
            #返回账号ID,用方法返回属性值提高了表的封装性。
            return self.id
    
        def is_authenticated(self):
            #假设已经通过验证
            return True
    
        def is_anonymous(self):
            #具有登陆名和密码的账号不是匿名用户
            return False

    解析定义表的代码如下:

    定义数据库连接的示例代码如下:

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session,sessionmaker
    from contextlib import contextmanager
    
    db_connect_string='mysql://v_user:v_pase@localhost:3306/test_database?charset=utf8'
    
    ssl_args={
        'ssl':{
            'cert':'/home/ssl/client-cert.pem',
            'key':'/home/shouse/ssl/client-key.pem',
            'ca':'/home/shouse/ssl/ca-cert.pem'
        }
    }
    engine=create_engine(db_connect_string,connect_args=ssl_args)
    SessionType=scoped_session(sessionmaker(bind=engine,expire_on_commit=False))
    def GetSession():
        return SessionType()
    
    @contextmanager
    def session_scope():
        session=GetSession()
        try:
            yield session
            session.commit()
        except:
            session.rollback()
            raise
        finally:
            session.close()

    解析此连接数据部分的代码如下:

    至此,已经可以用GetSession()函数创建数据库会话并进行数据库操作了。但为了使之后的数据库操作的代码能够自动进行事务处理,本例中定义了上下文函数session_scope()。在Python中定义上下文函数的方法是为其加入contextlib包中的contextmanager装饰器。在上下文函数中执行如下逻辑:在函数开始时建立数据库会话,此时会自动建立一个数据库事务:当发生异常时回滚(rollback)事务;当退出时关闭(close)连接。在关闭连接时会自动进行事务提交(commit)操作。

    进行数据库操作的代码:

    from sqlalchemy import or_,orm
    def InsertAccount(user,passwd,title,salary): #新增操作
        with session_scope() as session:
            account=orm.Account(user_name=user,passwd=passwd,title=title,salary=salary)
            session.add(account)
    
    def GetAccount(id=None,user_name=None): #查询操作
        with session_scope() as session:
            return session.query(orm.Account).filter(
                or_(orm.Account.id==id,orm.Account.user_name=user_name)
            ).first()
    
    def DeleteAccount(user_name): #删除操作
        with session_scope() as session:
            account=GetAccount(user_name=user_name)
            if account:
                session.delete(account)
    
    def UpdateAccount(id,user_name,password,title,salary):  #更新操作
        with session_scope() as session:
            account=session.query(orm.Account).filter(orm.Account.id==id).first()
            if not account:return
            account.user_name=user_name
            account.password=password
            account.salary=salary
            account.title=title
    
    
    InsertAccount("Mark","123","Manager",3000)  #调用新增操作
    InsertAccount("帅哥","456","Boss",2000)  #调用新增操作
    GetAccount(2) #调用查询操作
    DeleteAccount("Mark")
    UpdateAccount(1,"admin","none","System admin",2500)

    本例演示了数据库中最常用的4种基于记录的操作:新增、查找、删除、更新。对此部分代码的解析如下:

    主流数据库的连接方式

    SQLAlchemy这样的orm数据库操作方式可以对业务开发者屏蔽不同数据库之间的差异,这样当需要进行数据库迁移时(比如MySQL迁移到SQLite),则只需要更换数据库连接字符串。

    下表列出了SQLAlchemy连接主流数据库时的数据库字符串的编写方法:

    数据库连接字符串
    Microsoft SQLServer'mssql+pymssql://[user]:[pass]@[domain]:[port]/[dbname]'
    MySQL'mysql://[user]:[pass]@[domain]:[port]/[dbname]'
    Oracle'oracle://[user]:[pass]@[domain]:[port/[dbname]]'
    PostgreSQL'postgresql://[user]:[pass]@[domain]:[port]/[dbname]'
    SQLite'sqlite://[file_pathname]'

    以上就是Python下SQLAlchemy的简单介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault思否,如有侵犯,请联系admin@php.cn删除
    专题推荐:python
    上一篇:Python3爬虫实例之网易云音乐爬虫 下一篇:Python编程下SQLAlchemy查询条件设置的方法介绍
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• Python下Fabric的简单部署方法• 简单介绍Python下自己编写web框架的一些要点• Python下使用Psyco模块优化运行速度• 在Python下使用Txt2Html实现网页过滤代理的教程• python下函数参数的传递(参数带星号的说明)• 关于Python下的编码问题?• 为什么在python下编写print ‘hello world’ 提示invalid syntax?
    1/1

    PHP中文网