zoukankan      html  css  js  c++  java
  • sqlalchemy入门记录

    前言

    发现翻译全文时间比较久,所以先整个简单的使用说明吧

    安装SQLAlchemy

    pip install sqlalchemy
    

    查看SQLAlchemy版本

    In [1]: import sqlalchemy
    
    In [2]: sqlalchemy.__version__
    Out[2]: '1.0.14'
    

    连接数据库

    create_engine(数据库://用户名:密码(没有密码则为空)@主机名:端口/数据库名',echo =True)
    
    from sqlalchemy import create_engine
    engine = create_engine('mysql://root:@localhost:3306/sqlalchemy', echo=True)
    

    ORM

    基类

    In [10]: from sqlalchemy.ext.declarative import declarative_base
    
    In [11]: Base = declarative_base()
    

    In [12]: from sqlalchemy import Column, Integer, String
    
    In [13]: class User(Base):
       ....:     __tablename__ = 'users'
       ....:     id = Column(Integer, primary_key=True)
       ....:     name = Column(String(255))
       ....:     password = Column(String(255))
    

    创建表

    In [15]: Base.metadata.create_all(engine)
    2016-08-31 15:12:56,639 INFO sqlalchemy.engine.base.Engine DESCRIBE `users`
    2016-08-31 15:12:56,639 INFO sqlalchemy.engine.base.Engine ()
    2016-08-31 15:12:56,649 INFO sqlalchemy.engine.base.Engine ROLLBACK
    2016-08-31 15:12:56,651 INFO sqlalchemy.engine.base.Engine 
    CREATE TABLE users (
            id INTEGER NOT NULL AUTO_INCREMENT, 
            name VARCHAR(255), 
            password VARCHAR(255), 
            PRIMARY KEY (id)
    )
    
    
    2016-08-31 15:12:56,652 INFO sqlalchemy.engine.base.Engine ()
    2016-08-31 15:12:56,684 INFO sqlalchemy.engine.base.Engine COMMIT
    

    查看是否创建成功

    In [17]:  engine.table_names()
    2016-08-31 15:14:00,572 INFO sqlalchemy.engine.base.Engine SHOW FULL TABLES FROM `sqlalchemy`
    2016-08-31 15:14:00,572 INFO sqlalchemy.engine.base.Engine ()
    Out[17]: [u'users']
    

    使用Session

    初始化一个Session对象

    In [18]: from sqlalchemy.orm import sessionmaker
    
    In [19]: Session = sessionmaker(bind=engine)
    
    In [23]: session = Session()
    

    或者

    In [20]: Session = sessionmaker()
    
    In [21]: Session.configure(bind=engine)
    
    In [23]: session = Session()
    

    添加/更新对象

    In [22]: user_1 = User(id=1, name='wang', password='123') 
    
    In [24]: session.add(user_1)
    
    In [26]: user_2 = User(id=2, name='qian', password='234')                                                                                                                                         
    
    In [27]: user_3 = User(id=3, name='sun', password='345')
    
    In [28]: session.add_all([user_2, user_3])
    
    In [29]: session.dirty
    Out[29]: IdentitySet([])
    
    In [30]: session.new
    Out[30]: IdentitySet([<__main__.User object at 0x7fc6a805ad50>, <__main__.User object at 0x7fc6a805a910>, <__main__.User object at 0x7fc6a805ac90>])
    
    In [31]: user_1.id
    Out[31]: 1
    
    In [32]: session.commit()
    2016-08-31 15:26:17,798 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
    2016-08-31 15:26:17,799 INFO sqlalchemy.engine.base.Engine INSERT INTO users (id, name, password) VALUES (%s, %s, %s)
    2016-08-31 15:26:17,800 INFO sqlalchemy.engine.base.Engine ((1, 'wang', '123'), (2, 'qian', '234'), (3, 'sun', '345'))
    2016-08-31 15:26:17,802 INFO sqlalchemy.engine.base.Engine COMMIT
    
    In [33]: user_1.password = '1234'
    
    In [34]: session.dirty
    Out[34]: IdentitySet([<__main__.User object at 0x7fc6a805a910>])
    
    

    回滚(做了修改但是还未提交)

    In [33]: user_1.password = '1234'
    
    In [34]: session.dirty
    Out[34]: IdentitySet([<__main__.User object at 0x7fc6a805a910>])
    
    In [37]: session.rollback()
    
    In [38]: session.dirty
    Out[38]: IdentitySet([])
    

    查询

    In [39]: session.query(User).filter_by(name='wang')
    Out[39]: <sqlalchemy.orm.query.Query at 0x7fc6a801bfd0>
    
    In [40]: session.query(User).filter_by(name='wang').first()
    2016-08-31 15:36:07,500 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
    2016-08-31 15:36:07,500 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.password AS users_password 
    FROM users 
    WHERE users.name = %s 
     LIMIT %s
    2016-08-31 15:36:07,501 INFO sqlalchemy.engine.base.Engine ('wang', 1)
    Out[40]: <__main__.User at 0x7fc6a805a910>
    
    # all()
    In [41]: session.query(User).filter_by(password='123').all()                    
    2016-08-31 15:36:32,016 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.password AS users_password 
    FROM users 
    WHERE users.password = %s
    2016-08-31 15:36:32,016 INFO sqlalchemy.engine.base.Engine ('123',)
    Out[41]: [<__main__.User at 0x7fc6a805a910>]
    
    In [43]: for instance in session.query(User).order_by(User.id):
        print instance.id, instance.name
       ....:     
    2016-08-31 15:37:51,553 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.password AS users_password 
    FROM users ORDER BY users.id
    2016-08-31 15:37:51,554 INFO sqlalchemy.engine.base.Engine ()
    1 wang
    2 qian
    3 sun
    
    # filter_by
    In [52]: for name in session.query(User.name).filter_by(password='123'):
        print name
       ....:     
    2016-08-31 15:47:44,062 INFO sqlalchemy.engine.base.Engine SELECT users.name AS users_name 
    FROM users 
    WHERE users.password = %s
    2016-08-31 15:47:44,062 INFO sqlalchemy.engine.base.Engine ('123',)
    ('wang',)
    ('qian',)
    
    # order_by
    In [54]: for user in session.query(User).order_by(User.id)[1:3]:
        print user.name
       ....:     
    2016-08-31 15:51:18,657 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.password AS users_password 
    FROM users ORDER BY users.id 
     LIMIT %s, %s
    2016-08-31 15:51:18,658 INFO sqlalchemy.engine.base.Engine (1, 2)
    qian
    sun
    
    

    查询的时候通用过滤符号

    # equal
    query.filter(User.name == 'ed')
    
    # not equal
    query.filter(User.name != 'ed')
    
    # like 
    query.filter(User.name.like('%ed%'))
    
    # in
    query.filter(User.name.in_(['ed', 'wendy', 'jack']))
    
    # not in
    query.filter(~User.name.in_(['ed', 'wendy', 'jack']))
    
    # add
    
    # use and_()
    from sqlalchemy import and_
    query.filter(and_(User.name == 'ed', User.fullname == 'Ed Jones'))
    
    # or send multiple expressions to .filter()
    query.filter(User.name == 'ed', User.fullname == 'Ed Jones')
    
    # or chain multiple filter()/filter_by() calls
    query.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones')
    
    # or --Make sure you use or_() and not the Python or operator!
    from sqlalchemy import or_
    query.filter(or_(User.name == 'ed', User.name == 'wendy'))
    
    # match
    query.filter(User.name.match('wendy'))
    
    

    返回list或者scalar

    all() 列表
    
    first() scalar
    
    one() one_or_none()  scalar()
    

    参考

    sqlalchemy官网

  • 相关阅读:
    使用JS获取选中的复选框的值
    AngularJS实现tab选项卡
    Java递归获取树父节点下的所有树子节点
    SQL中的case when then
    用sql语句(alter)追加新字段、外键、删除列
    javascript把number转化成百分比
    使用group by来去除重复记录
    JavaScript数组
    基本排序方法
    (转)如何学好C语言
  • 原文地址:https://www.cnblogs.com/wswang/p/5826347.html
Copyright © 2011-2022 走看看