欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python SQLAlchemy

程序员文章站 2023-11-08 17:29:16
一、连接及创建类 二、新增 三、查询 四、删除 五、修改 六、异常 引用说明: http://www.codexiu.cn/python/SQLAlchemy%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/73/529/ 转载请注明出处。 ......

一、连接及创建类

from sqlalchemy import create_engine
from sqlalchemy.orm import session
from sqlalchemy.ext.automap import automap_base
# 连接数据库:
engine = create_engine('mysql+pymysql://root:password@localhost:3306/mydb')
# 创建与表名匹配的映射类:
base = automap_base()
base.prepare(engine, reflect=true)
metadata = base.classes.fn_metadata
resource = base.classes.fn_resource
task = base.classes.fn_task
config = base.classes.sys_config
user = base.classes.sys_user
db_session = session(engine)

 

二、新增

#新增
#方式一
session.add(user(user_id=1, user_name='test'))
session.add(config(config_id=1, config_name='test'))
session.commit()
session.close()
#方式二
session.add_all([
    user(user_id=1, user_name='test'),
    config(config_id=1, config_name='test')
])
session.commit()
session.close()

 

三、查询

#结果的类型
instance
instance of list
keyed tuple of list
value of list

#基本查询
session.query(user).filter_by(username='abc').all()
session.query(user).filter(user.username=='abc').all()
session.query(blog).filter(blog.create >= 0).all()
session.query(blog).filter(blog.create >= 0).first()
session.query(blog).filter(blog.create >= 0 | blog.title == 'a').first()
session.query(blog).filter(blog.create >= 0 & blog.title == 'a').first()
session.query(blog).filter(blog.create >= 0).offset(1).limit(1).scalar()
session.query(user).filter(user.username ==  'abc').scalar()
session.query(user.id).filter(user.username ==  'abc').scalar()
session.query(blog.id).filter(blog.create >= 0).all()
session.query(blog.id).filter(blog.create >= 0).all()[0].id
dict(session.query(blog.id, blog.title).filter(blog.create >= 0).all())
session.query(blog.id, blog.title).filter(blog.create >= 0).first().title
session.query(user.id).order_by('id desc').all()
session.query(user.id).order_by('id').first()
session.query(user.id).order_by(user.id).first()
session.query(user.id).order_by(-user.id).first()
session.query('id', 'username').select_from(user).all()
session.query(user).get('16e19a64d5874c308421e1a835b01c69')

#多表查询
session.query(blog, user).filter(blog.user == user.id).first().user.username
session.query(blog, user.id, user.username).filter(blog.user == user.id).first().id
session.query(blog.id,
              user.id,
              user.username).filter(blog.user == user.id).first().keys()

#条件查询
from sqlalchemy import or_, not_
session.query(user).filter(or_(user.id == '',
                               user.id == '16e19a64d5874c308421e1a835b01c69')).all()
session.query(user).filter(not_(user.id == '16e19a64d5874c308421e1a835b01c69')).all()
session.query(user).filter(user.id.in_(['16e19a64d5874c308421e1a835b01c69'])).all()
session.query(user).filter(user.id.like('16e19a%')).all()
session.query(user).filter(user.id.startswith('16e19a')).all()
dir(user.id)

#函数
from sqlalchemy import func
session.query(func.count('1')).select_from(user).scalar()
session.query(func.count('1'), func.max(user.username)).select_from(user).first()
session.query(func.count('1')).select_from(user).scalar()
session.query(func.md5(user.username)).select_from(user).all()
session.query(func.current_timestamp()).scalar()
session.query(user).count()

 

四、删除

#删除
#方式一
session.query(user).filter(user.user_id == 1).first().delete()
session.commit()
session.close()
#方式二
user = session.query(user).filter(user.user_id == 1).first()
session.delete(user)
session.commit()
session.close()

 

五、修改

#修改
#方式一
session.query(user).filter(user.user_name == 'abc').update({'name': 'test'})
session.commit()
session.close()
#方式二
user = session.query(user).filter_by(user_name='abc').scalar()
user.name = 'test'
session.commit()
session.close()

 

六、异常

try:
    pass
except exception as e:
    logging.error('[x] %s' % e)
    print('[x] %s' % e)  

#必填项为空
sqlalchemy.exc.integrityerror
#字段类型错误
sqlalchemy.exc.internalerror

 

 

 

引用说明:

http://www.codexiu.cn/python/sqlalchemy%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b/73/529/

 

转载请注明出处。