sqlalchemy single table CRUD

1, connect to the database, and create session

from sqlalchemy.orm Import sessionmaker
 from SQLAlchemy Import create_engine 

Engine = create_engine (
         " MySQL + pymysql: // root: password @ 127.0.0.1:? 3306 / database = utf8 charset " , 
        max_overflow = 0,   # over up to create external connection pool size connection 
        pool_size =. 5,   # connection pool size 
        pool_timeout = 30,   # pool is no time thread waits up, otherwise an error 
        pool_recycle = -1   # how long after the threads in the pool of recovery (reset) connected at one time 
    ) 

the SessionFactory sessionmaker = (the bind = Engine) 

the session = the SessionFactory ()

2, by

# Single 
obj = the Users (name = ' Tom ' ) 
session.add (obj) 
Session.commit () 
# plurality 
session.add_all ([ 
        the Users (name = ' Piece ' ), 
        the Users (name = ' death ' ) 
]) 
Session.commit () 
session.close ()

3, deleted

session.query(Users).filter(Users.id >= 2).delete()
session.commit()
session.close()

4, change

session.query (the Users) .filter (users.id ==. 4) .Update ({Users.name: ' death ' }) 
session.query (the Users) .filter (users.id ==. 4) .Update ({ ' name ' : ' Naruto ' })
 # in the original field, modify the properties 
session.query (the Users) .filter (users.id ==. 4) .Update ({ ' name ' : Users.name + " the DSB " }, synchronize_session = False) 
Session.commit () 
session.close ()

5, check

# Queries all 
the Result = session.query (the Users) .all ()
 for Row in the Result:
         Print (row.id, row.name)
 # according to the conditions query 
result = session.query (Users) .filter ( Users.id> = 2 )
 for Row in Result:
         Print (row.id, row.name)
 # first object query id is greater than 2 
Result = session.query (the Users) .filter (users.id> = 2 ) .first ()
 Print (result)

supplement

# 1. 指定列, 字段别名
# select id,name as cname from users;
result = session.query(Users.id,Users.name.label('cname')).all()
for item in result:
        print(item[0],item.id,item.cname)
# 2. 默认条件and
session.query(Users).filter(Users.id > 1, Users.name == 'abc').all()
# 3. between
session.query(Users).filter(Users.id.between(1, 3), Users.name == 'abc').all()
# 4. in, not in ~
session.query(Users).filter(Users.id.in_([1,3,4])).all()
session.query(Users).filter(~Users.id.in_([1,3,4])).all()
# 5. 子查询
session.query(Users).filter(Users.id.in_(session.query(Users.id).filter(Users.name=='abc'))).all()
# 6. and 和 or
from sqlalchemy import and_, or_
# 默认 and
session.query(Users).filter(Users.id > 3, Users.name == 'eric').all()
# and
session.query(Users).filter(and_(Users.id > 3, Users.name == 'eric')).all()
# or
session.query (the Users) .filter (or_ (users.id <2, Users.name == ' Eric ' )). All ()
 # used together or and 
session.query (the Users) .filter ( 
    or_ ( 
        users.id <2 , 
        and_ (Users.name == ' Eric ' , users.id>. 3 ), 
        Users.extra ! = "" 
    )). All () 

# 7. the filter_by, query execution is internal filter 
session.query (the Users ) .filter_by (name = ' ABC ' ) .all () 

# 8. The arbitrary number wildcard%, _ a 
RET = session.query (the Users) .filter (Users.name.like ( ' A_ ')).all()
ret = session.query(Users).filter(~Users.name.like('e%')).all()

# 9. 切片/分页
result = session.query(Users)[1:2]

# 10.排序
ret = session.query(Users).order_by(Users.name.desc()).all()
ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()

# 11. group by, having , 聚合函数
from sqlalchemy.sql import func

ret = session.query(
        Users.depart_id,
        func.count(Users.id),
).group_by(Users.depart_id).all()
for item in ret:
        print(item)

# having
from sqlalchemy.sql import func

ret = session.query(
        Users.depart_id,
        func.count(Users.id),
).group_by(Users.depart_id).having(func.count(Users.id) >= 2).all()
for item in ret:
        print(item)

# 12.union 和 union all, unuon 去重 union all 不去重
"""
select id,name from users
UNION
select id,name from users;
"""
# 去重
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union(q2).all()
# 不去重
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union_all(q2).all()

note:

1, operation data ends, close the session

session.close()

2, add, delete, change, to submit data

session.commit()

 

Guess you like

Origin www.cnblogs.com/wt7018/p/11616548.html