zoukankan      html  css  js  c++  java
  • sqlalchemy精华版

    上一篇主要粗略讲了Flask+mysql+sqlalchemy的使用,这次精讲下sqlalchemy的用法,话不多说,上代码。

    ----------sqlalchemy_test.py

    # -*- coding: utf-8 -*-
    # Flask hello world
    ##链接数据库 mysql
    from sqlalchemy import *
    from sqlalchemy.orm import scoped_session, sessionmaker
    ###连接数据库
    db_connect_string = 'mysql://root:root@127.0.0.1:3306/flask?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 get_session():
        return SessionType
    ####创建自动事务函数
    from contextlib import contextmanager
    @contextmanager
    def session_scope():
        session = get_session()
        try:
            yield session
            session.commit()
        except:
            session.rollback()
            raise
        finally:
            session.close()
    ####开始进行数据库操作
    #
    #
    #
    #
    '''
    class db_admin():
        # 表的名字:
        __tablename__ = 'db_admin'
        # 表的结构:
        id = Column(Integer, primary_key=True)
        name = Column(String(255))
        pwd = Column(String(255))
        power = Column(String(20))
        date = Column(Date())
    '''
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
    from sqlalchemy.orm import sessionmaker, relationship
    from sqlalchemy import create_engine
    
    Base = declarative_base()
    # 创建单表
    class Users(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
        extra = Column(String(16))
    
    __table_args__ = (
            UniqueConstraint('id', 'name', name='uix_id_name'),
            Index('ix_id_name', 'name', 'extra'),
    )
    
    class Address(Base):
        __tablename__ = 'address'
        id = Column(Integer, primary_key=True)
        address = Column(String(32))
        user_id = Column(Integer, ForeignKey('users.id'))
    
    ###添加示例
    '''
    obj = Users(name="alex0", extra='sb')
    session.add(obj)
    session.add_all([
        Users(name="alex1", extra='sb'),
        Users(name="alex2", extra='sb'),
    ])
    '''
    ###创建表
    Base.metadata.create_all(engine)
    #添加一条数据
    def insert(name, fullname):
        with session_scope() as session:
            insert_data = Users(name = name, extra = fullname)
            session.add(insert_data)
    #添加多条数据
    def insert_data(data):
        with session_scope() as session:
            session.add_all(data)
    if __name__ == '__main__':
        #insert('taotao11', 'kk')
        '''
        data = [m
                Users(name = 'xx', extra = '111'),
                Users(name = 'xxxx', extra = 'xx3131'),
            ]
        insert_data(data)    
        '''
    ####查询数据
    with session_scope() as session:
        ###查询所有
        #list = session.query(Users).filter()
        ###查询==  !=
        #list = session.query(Users).filter(Users.name=='xx')
        ##list = session.query(Users).filter(Users.name!='xx')
        ###like 模糊查询
        #list = session.query(Users).filter(Users.name.like('%tao%'))
        ##过滤器in_
        #list = session.query(Users).filter(Users.id.in_([1,3,5,7]))
        ##查询空值
        #list = session.query(Users).filter(Users.name == None)
        #list = session.query(Users).filter(Users.name.is_(None))
        ##非逻辑 在前面加上~
        ##list = session.query(Users).filter(~Users.id.in_([1,3,5,7]))
        ####多条件查询  3种方法
        #并列条件
        #list = session.query(Users).filter(Users.name == 'xx', Users.id>1)
        ##and_方法
        #list = session.query(Users).filter(and_(Users.name == 'xx', Users.id>1))
        ###多个filter
        #list  =session.query(Users).filter(Users.name == 'xx').filter(Users.id>1)
        #####单一条件并列or_
        #list = session.query(Users).filter(or_(Users.name == 'xx', Users.extra=='kk'))
        ####执行原生sql
        #list  = session.execute('select * from Users')
        '''
        for v in list:
            print v.id, v.extra, v.name
        '''
  • 相关阅读:
    三种等待时间的区别
    多种测试的测试方法
    测试面试题总结
    自动化过程中定位不到元素时使用等待方法
    账号登录测试,多表查询
    TP商城添加购物车自动化测试
    二十四个球
    老鼠喝药
    购物车测试点
    前后端分页
  • 原文地址:https://www.cnblogs.com/shuangzikun/p/taotao_sql_sqlalchemy.html
Copyright © 2011-2022 走看看