SQLAlchemy 增删该查
Posted cp9648
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLAlchemy 增删该查相关的知识,希望对你有一定的参考价值。
SQLAlchemy-03-1
Table(表)类方式 - Insert
# 导入引擎创建函数 from sqlalchemy import create_engine # 导入语句处理函数 from sqlalchemy.sql.expression import text # 导入元数据、表类 from sqlalchemy import MetaData, Table # 导入数据类型 from sqlalchemy import Integer, String, Text, DateTime # 导入列类和关联 from sqlalchemy import Column, ForeignKey
-
创建引擎
uri = ‘mysql+pymysql://root:[email protected]:3306/user_system?charset=utf8‘ # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False engine = create_engine(uri, echo=True)
-
构建元数据
# 元数据: 主要是指数据库表结构、关联等信息 # 实例化MetaData(从引擎读取元数据) meta = MetaData(bind=engine)
-
获取表
tb_user = Table(‘tb_user‘, meta, autoload=True, autoload_with=engine)
-
Insert
# 构造查询表达式(带有值) ins = tb_user.insert().values(username=‘ruirui‘, password=‘123456‘) print(str(ins)) # 查看参数 print(ins.compile().params) # 查看SQL print(ins.compile().string) # 创建连接 conn = engine.connect() # 执行insert操作 result = conn.execute(ins) # 如果是insert操作 if result.is_insert: # 获取新添加的记录的主键 print(result.inserted_primary_key) # 构造查询表达式(不带值) ins = tb_user.insert() print(str(ins)) # 插入单条数据 result = conn.execute(ins, username=‘aaron‘, password=‘hillel‘) # 插入多条数据 data = [ {‘username‘: ‘swartz‘, ‘password‘ : ‘1234567‘}, {‘username‘: ‘gates‘, ‘password‘ : ‘3456789‘}, {‘username‘: ‘bill‘, ‘password‘ : ‘111222333‘} ] result = conn.execute(ins, data) # 显示新增的条数 print(result.rowcount) # 关闭连接 conn.close()
-
销毁引擎
engine.dispose()
SQLAlchemy-03-2
Table(表)类方式 - Delete
# 导入引擎创建函数 from sqlalchemy import create_engine # 导入语句处理函数 from sqlalchemy.sql.expression import text # 导入元数据、表类 from sqlalchemy import MetaData, Table # 导入数据类型 from sqlalchemy import Integer, String, Text, DateTime # 导入列类和关联 from sqlalchemy import Column, ForeignKey
-
创建引擎
uri = ‘mysql+pymysql://root:[email protected]:3306/user_system?charset=utf8‘ # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False engine = create_engine(uri, echo=True)
-
构建元数据
# 元数据: 主要是指数据库表结构、关联等信息 # 实例化MetaData(从引擎读取元数据) meta = MetaData(bind=engine)
-
获取表
tb_user = Table(‘tb_user‘, meta, autoload=True, autoload_with=engine)
-
Delete
# 构造删除表达式(无条件) dlt = tb_user.delete() print(str(dlt)) # 构造删除表达式(带条件: id >= 10) dlt = tb_user.delete().where( tb_user.columns[‘id‘] >= 10 ) print(str(dlt)) # 构造删除表达式(带条件: password以1开头) dlt = tb_user.delete().where( tb_user.columns[‘password‘].startswith(‘1‘) ) print(str(dlt)) # 构造删除表达式(带多个条件: password包含3但是不包含9,且id<10) dlt = tb_user.delete().where( tb_user.columns[‘password‘].like(‘%3%‘) ).where( tb_user.columns[‘password‘].notlike(‘%9%‘) ).where( tb_user.columns[‘id‘] < 10 ) print(str(dlt)) # 创建连接 conn = engine.connect() # 执行delete操作 result = conn.execute(dlt) # 显示删除的条数 print(result.rowcount) # 关闭连接 conn.close()
-
显示SQL语句
def structure_sql(sql_str_or_stmt, dialect_obj=None, sql_params=None, return_obj=False): ‘‘‘ 构造SQL语句 参数: sql_str_or_stmt: 原始(Raw)SQL字符串或Statement(Select、Insert、Update、Delete)对象 dialect_obj: 数据库专用术语对象 sql_params: 参数 return_obj: 是否返回编译对象(默认否,返回字符串) refer: https://stackoverflow.com/questions/5631078/sqlalchemy-print-the-actual-query#answer-45551136 ‘‘‘ stmt = sql_str_or_stmt # 如果是原始字符串,则包装成 Statement 对象 if isinstance(stmt, str): stmt = text(stmt) if bool(sql_params): # Insert、Delete、Update和Select本身带有参数,无需额外参数绑定,没有bindparams()方法 if hasattr(stmt, ‘bindparams‘): stmt = stmt.bindparams(**sql_params) # 获取数据库专业术语 if dialect_obj is None: # 如果没有指定,则从语句绑定的引擎中获取 if bool(stmt.bind): dialect_obj = stmt.bind.dialect else: # 如果没有指定,也没有绑定引擎,则抛出错误 raise ValueError(‘参数 [dialect_obj] 未指定‘) # 编译语句 full_sql = stmt.compile( dialect=dialect_obj, compile_kwargs={"literal_binds": True} ) return full_sql if return_obj else full_sql.string
-
销毁引擎
engine.dispose()
SQLAlchemy-03-3
Table(表)类方式 - Update
# 导入引擎创建函数 from sqlalchemy import create_engine # 导入语句处理函数 from sqlalchemy.sql.expression import text # 导入元数据、表类 from sqlalchemy import MetaData, Table # 导入数据类型 from sqlalchemy import Integer, String, Text, DateTime # 导入列类和关联 from sqlalchemy import Column, ForeignKey
-
创建引擎
uri = ‘mysql+pymysql://root:[email protected]:3306/user_system?charset=utf8‘ # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False engine = create_engine(uri, echo=True)
-
构建元数据
# 元数据: 主要是指数据库表结构、关联等信息 # 实例化MetaData(从引擎读取元数据) meta = MetaData(bind=engine)
-
获取表
tb_user = Table(‘tb_user‘, meta, autoload=True, autoload_with=engine)
-
Update
# 构造更新表达式(无条件) upt = tb_user.update() print(str(upt)) # 构造更新表达式(带条件: 8 <= id <= 9) upt_nd = tb_user.update().where( tb_user.columns.id.between(8, 9) ) print(str(upt_nd)) # 构造更新表达式(带值) upt = tb_user.update().values(username=‘新来的‘) print(str(upt)) upt = tb_user.update().values(username=‘Python‘, password=‘py666789‘) print(str(upt)) # 构造更新表达式(带条件和值)(可以用多个where) new_data = { ‘username‘: ‘new数据‘, ‘password‘: ‘123456‘ } upt = tb_user.update().where( tb_user.columns[‘id‘] > 10 ).values(**new_data) print(str(upt)) # 创建连接 conn = engine.connect() # 执行update操作(对于带值的Update) result = conn.execute(upt) # 执行update操作(没有带值的Update) result = conn.execute(upt_nd, password=‘6ge654321‘) # 显示更新的条数 print(result.rowcount) # 关闭连接 conn.close()
-
销毁引擎
engine.dispose()
SQLAlchemy-03-4
Table(表)类方式 - Select
# 导入引擎创建函数 from sqlalchemy import create_engine # 导入语句处理函数 from sqlalchemy.sql.expression import text # 导入元数据、表类 from sqlalchemy import MetaData, Table # 导入数据类型 from sqlalchemy import Integer, String, Text, DateTime # 导入列类和关联 from sqlalchemy import Column, ForeignKey
-
创建引擎
uri = ‘mysql+pymysql://root:[email protected]:3306/user_system?charset=utf8‘ # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False engine = create_engine(uri, echo=True)
-
构建元数据
# 元数据: 主要是指数据库表结构、关联等信息 # 实例化MetaData(从引擎读取元数据) meta = MetaData(bind=engine)
-
获取表
tb_user = Table(‘tb_user‘, meta, autoload=True, autoload_with=engine)
-
Select
# 构造查询表达式(无条件) sel = tb_user.select() print(str(sel)) # 构造查询表达式(带条件: 8 <= id <= 9) sel = tb_user.select().where( tb_user.columns.id.between(8, 9) ) print(str(sel)) # 创建连接 conn = engine.connect() # 执行select操作 result = conn.execute(sel) # 是否返回了结果 if result.returns_rows: # 取一条 print(result.fetchone()) print(result.closed) # 取N条 N = 2 print(result.fetchmany(N)) # 取剩余的所有条 print(result.fetchall()) # 关闭结果游标 result.close() # 执行select操作 result = conn.execute(sel) # 取第一条(first()方法自动关闭游标) print(result.first()) print(result.closed) # 关闭连接 conn.close()
-
销毁引擎
engine.dispose()
以上是关于SQLAlchemy 增删该查的主要内容,如果未能解决你的问题,请参考以下文章