zoukankan      html  css  js  c++  java
  • SqlAlchemy基本

    安装SQLAlchemy:
    $ easy_install sqlalchemy

    数据库表是一个二维表,包含多行多列

    [
        ('1', 'Michael'),
        ('2', 'Bob'),
        ('3', 'Adam')
    ]
    

    Python的DB-API返回的数据结构就是像上面这样表示的。

    tuple表示一行很难看,
    所以用类的实例展现出来
    如果把一个tuple用class实例来表示,就可以更容易地看出表的结构来:

    class User(object):def __init__(self, id, name):
            self.id = id
            self.name = name
    
    [
        User('1', 'Michael'),
        User('2', 'Bob'),
        User('3', 'Adam')
    ]
    同样是User表
    这就是传说中的ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上


    create_engine()用来初始化数据库连接。SQLAlchemy用一个字符串表示连接信息:

    '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
    由于有了ORM,我们向数据库表中添加一行记录,可以视为添加一个User对象:
    # 创建session对象:
    session = DBSession()
    # 创建新User对象:
    new_user = User(id='5', name='Bob')
    # 添加到session:
    session.add(new_user)
    # 提交即保存到数据库:
    session.commit()
    # 关闭session:
    session.close()
    可见,关键是获取session,然后把对象添加到session,最后提交并关闭。Session对象可视为当前数据库连接。
    如何从数据库表中查询数据呢?有了ORM,查询出来的可以不再是tuple,而是User对象。
     创建Session:
    session = DBSession()
    # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
    user = session.query(User).filter(User.id=='5').one()
    # 打印类型和对象的name属性:print 'type:', type(user)
    print 'name:', user.name
    # 关闭Session:
    session.close()

    ORM就是把数据库表的行与相应的对象建立关联,互相转换。

    如果一个User拥有多个Book,就可以定义一对多关系如下:

    class User(Base):
        __tablename__ = 'user'
    
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
        # 一对多:
        books = relationship('Book')
    
    class Book(Base):
        __tablename__ = 'book'
    
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
        # “多”的一方的book表是通过外键关联到user表的:
        user_id = Column(String(20), ForeignKey('user.id'))

    当我们查询一个User对象时,该对象的books属性将返回一个包含若干个Book对象的list。



    先初始化sessionmaker数据库链接,然后实例化,然后通过session对象链接数据库
    对数据库进行操作后,用comimite提交,最后进行关闭。



    如何从数据库表中查询数据呢?

    询出来的可以不再是tuple,而是User对象。SQLAlchemy提供的查询接口如下:
     创建Session:
    session = DBSession()
    # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
    user = session.query(User).filter(User.id=='5').one()
    # 打印类型和对象的name属性:print 'type:', type(user)
    print 'name:', user.name
    # 关闭Session:
    session.close()


    在使用 create_engine 创建引擎时,如果默认不指定连接池设置的话,一般情况下,SQLAlchemy会使用一个 QueuePool 绑定在新创建的引擎上。并附上合适的连接池参数。






























  • 相关阅读:
    IOS 使用动态库(dylib)和动态加载framework
    iOS 开发者应该知道的 ARM 结构
    解惑好文:移动端H5页面高清多屏适配方案
    js 单例模式的实现方式----闭包和构造函数内部判断
    解决express video 手机无法播放的问题
    前后端通吃的单元测试---mocha
    swift-ios开发pod的使用(1)
    UI 自动化测试工具BackstopJS简介(1)
    阿里妈妈-RAP项目的实践(3)
    阿里妈妈-RAP项目的实践(2)
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5770029.html
Copyright © 2011-2022 走看看