首页 > 数据库 >【Python/数据库】SQLAlchemy基础操作

【Python/数据库】SQLAlchemy基础操作

时间:2023-12-05 14:11:53浏览次数:53  
标签:SQLAlchemy name Python 数据库 db session User query user

一 、SQLAlchemy——创建表

# ORM
# 1. Class - Obj
# 2. 创建数据库引擎
# 3. 将所有的Class序列化为数据表
# 4. ORM操作 - CRUD(增删改查操作的简称)

1.创建一个 class

# create_table.py

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
# Base 是ORM模型的基类
# ORM模型 - Obj里面的属性 == table中创建的字段

from sqlalchemy import Column, Integer, INT, INTEGER, VARCHAR, String
# 以上的基本数据类型和对象封装类型都是可以使用的,看个人喜好

class User(Base):
	__tablename__ = 'user' // user是即将创建的数据表名称
	id = Column(Integer, primary_key=True, autoincrement=True)
	name = Column(String(32), index=True)

2. 创建数据引擎

# create_table.py

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:root@localhost:3306/fast_demo?charset=utf8')
# 'mysql+sqlalchemy://用户名:密码@数据库主机地址:端口号/数据库名?字符编码格式(可选)'
# ?字符编码格式(可选)
# 如果存储内容中文,建议设置charset = utf8

3. 将所有的继承Base的Class序列化成数据表

# create_table.py

Base.meatdata.create_all(engine)
# 在基类中寻找所有继承自我的Class,在engine里实现

二 、SQLAlchemy——增

# 1. 选中数据库 - 创建数据库引擎 导入数据库引擎
# 2. 创建查询窗口 - 必须是选中数据的查询窗口
# 3. 创建sql语句
# 4. 点击运行
  • 增加一条数据

原生SQL语句:
insert into '表名'(name) values (值1, 值2, ...)

# crud_insert.py

# 1. 选中数据库 - 创建数据库引擎 导入数据库引擎
from create_table import engine

# 2. 创建查询窗口 - 必须是选中数据的查询窗口
from sqlalchemy.orm import sessionmaker
Session_windew = sessionmaker(engine)

# 打开查询窗口
db_session = Session_window()

# 3. 创建sql语句
from create_table import User
user_obj = User(name='aabbcc') # 创建sql语句
db_session.add(user_obj) # 相当于将sql语句粘贴到查询窗口
db_session.commit() # 执行sql语句
db_session.close() # 关闭

  • 增加多条数据
from create_table import User
user_obj_list = ['User(name='zs'), User(name='lisi')']
db_session.add_all(user_obj_list)
db_session.commit()
db_session.close()

三 、SQLAlchemy——查

  • 查询数据

原生SQL语句:
sellect 字段[,字段一,字段二,...] from 表名 [其他操作]

# crud_select.py

from create_table import engine, User
from sqlalchemy.orm import sessionmaker

# 创建查询窗口
Session = sessionmaker(engine)
db_session = Session()

# 1.查询数据:
user_obj = db_session.query(User).first()
print(user_obj.id, user_obj.name)

user_obj_list = db_session.query(User).all()
print(user_obj_list)
for row in user_obj_list:
	print(row.id, row.name)
  
# 2.带条件的查询
# filter(表达式)
user_obj1 = db_session.query(User).filter(User.id <=2,User.name == 'zs').all()
print(user_obj1)
for row in user_obj1:
	print(row.id, row.name)
  
# filter(表达式)
# filter_by(传参),不推荐使用,不方便
user_obj1 = db_session.query(User).filter(User.id =2,User.name = 'zs').all()
print(user_obj1)
for row in user_obj1:
	print(row.id, row.name)

四 、SQLAlchemy——改

  • 更新数据

原生SQL语句:

update 表名 set 字段名=“value”, ...

# crud_update.py

from sqlalchemy.orm import sessionmaker
from create_table import engine,User

# 创建查询窗口
Session = sessionmaker(engine)
db_session = Session()

# 1. 修改一条数据
user_obj = db_session.query(User).filter(User.id == 1).update({"name":"ww"})
db_session.commit()

# 2. 修改多条数据
user_obj = db_session.query(User).filter(User.id >= 1).update({"name":"666"})
db_session.commit()


五 、SQLAlchemy——删

  • 删除数据

原生SQL语句:

delete from 表名 [筛选条件]——此命令只会删除表内数据,不会删除表

drop 表名——此命令会直接删除表本身

# crud_delete.py

from sqlalchemy.orm import sessionmaker
from create_table import engine,User

# 创建查询窗口
Session = sessionmaker(engine)
db_session = Session()

# 删除一条数据
res = db_session.query(User).filter(User.id==1).delete()
db_session.commit()
print(res)

# 删除多条数据
res = db_session.query(User).filter(User.id>=1).delete()
db_session.commit()
print(res)

六 、高级用法

并条件:,连接或者 and_()

db_session.query(User).filter(User.name == 'zs', User.uid == 1).first()

或条件: or_()

db_session.query(User).filter(or_(User.name == 'zs', User.uid == 1)).all()

筛选字段:

db_session.query(User.gender, User.name).filter(User.name == 'zs', User.uid == 1).first()

别名(不影响数据库):.label()

db_session.query(User.gender.label('xb'), User.name).filter(User.name == 'zs', User.uid == 1).first()

排序:order_by() 默认asc(升序),desc(降序)

db_session.query(User).order_by(User.uid.desc).first()

between筛选:between()

db_session.query(User).filter(User.uid.between(1, 10)).all()

in筛选:in_()

db_session.(User).filter(User.uid.in_([1, 2, 3])).all() 

not in筛选:~ 或者 notin_()

db_session.(User).filter(User.uid.notin_([1, 2, 3])).all()

文本序列:

from sqlalchemy.sql import text

res = db_session.query(User).filter(text('id<value and name=:name')).params(value=4, name='lisi')

聚合:

from sqlalchemy.sql import func
db_session.query(func.count(user.gender).label('count'), User.gender).group_by(User.gender).all()

引用添加:

# synchronize_session = True: 同步提交更新
db_session.query(User).filter(User.id == 3).update({User.anme: User.name + '666'}.synchronize_session=False)

-end-

标签:SQLAlchemy,name,Python,数据库,db,session,User,query,user
From: https://www.cnblogs.com/Fanwenming1/p/17877082.html

相关文章

  • 【Python/数据库】SQLAlchemy一对多,多对多操作
    SQLAlchemy一对多操作1.创建多表#create_table_ForeginKey.pyfromsqlalchemy.ext.declarativeimportdeclarative_basefromsalalchemyimportColumn,INT,VARCHAR,ForeignKeyfromsqlalchemyimportcreate_engineBase=declarative_base()classStudent(Base)......
  • python练习
    1将数字汉字符号一起打印2大小写转换首字母大写3使用数学函数4注释5对字符串求长度6通过索引获取单个字符7布尔类型8空值类型9查找所属类型type10列表将数字汉字符号一起打印name="璃月"date="12月5号"message=f'{name}您好,今天是:{date}'print(message)或者可以......
  • 使用Python发送HTTP请求的最佳实践:让你的代码锐利如刀!
    在当今的数字化时代,使用Python发送HTTP请求已经成为了许多开发人员的日常任务。无论是进行API交互、网页爬取,还是构建网络服务,掌握Python的HTTP请求技巧都至关重要。但是,要想在竞争激烈的编程领域中脱颖而出,你需要掌握一些最佳实践,让你的代码锐利如刀!安装必要的库首先,确保你已经安......
  • python文件不显示cmd黑窗口,打包py,pyw文件为exe文件
    问题描述:编写的python文件为定时任务,需要长时间运行,但是打开的cmd黑色窗口看起来很不舒服,于是打包为exe文件,隐藏cmd黑色窗口步骤:1.使用pipinstallpyinstaller命令安装pyinstaller(前提是已安装python);2.很多时候出现pip版本过老的报错,此时使用pip--version查看pip版本,确定......
  • 修改python打包后的窗体图标、任务栏图标、exe图标
    前言我python开发的GUI界面(图形用户界面)一直是tkinter,打包exe一直是Pyinstaller。但是打包出来的exe图标、状态栏图标、窗体左上角图标一直是默认的羽毛,我想自定义。效果最后使用base64创建临时ico解决了该问题步骤创建icoToBase64.py,内容如下:importbase64#ico......
  • 奇迹Mu 删除MD5加密数据库语句!
    很多GM在自己都不知道的情况下,就给游戏加了MD5的加密,MD5加密通常都是32位的加密,在写程序的逻辑上,通常会进行好几次的循环加密,导致很多用户注册或是登陆的时候会显示错误,今天MU-GM给大家提供一个清除数据库MD5的SQL语句。ifexists(select*fromdbo.sysobjectswhereid=obje......
  • 使用mysqlbinlog恢复数据库(逆向或正向都可以)
    我确实喜欢写一些不一样的东西。如果我们在网上搜索“mysql恢复数据库”、“使用mysqlbinlog恢复数据库”、“mysql使用binlog恢复被删除的表”等,一般可以搜索到很多,但是仔细分析会发现,这许多的基本都在讲几件事:1、查看是否已开启在线日志,如果没有开启就开启2、查看日志文件位置3......
  • Laravel开发中的数据库迁移Database Migrations和 对象关系映射Eloquent ORM
    当涉及到Laravel中的数据库操作时,数据库迁移和EloquentORM是两个重要的概念。它们用于管理数据库结构和进行数据操作,但在功能和用途上有所不同。数据库迁移(DatabaseMigrations)是Laravel中用于管理数据库结构变化的工具。它允许您通过编写简单的代码来创建、修改或删除数......
  • Python编程:从入门到实践--Chapter16
    在16章的json数据测试如下代码时报错:[Errno22]Invalidargument:'eq_data\readable_eq_data.json'#将数据作为字符串读取并转换为python对象path=Path('eq_data\eq_data_1_day_m1.json')contents=path.read_text()all_eq_data=json.loads(contents)#将数据文件转换为......
  • 深入探讨 Python 中的装饰器和上下文管理器
    Python作为一门灵活而强大的语言,提供了许多高级特性,其中装饰器(Decorators)和上下文管理器(ContextManagers)是其中两个非常有用的概念。这两个功能性特性提供了对代码结构和行为进行修改和控制的强大工具。它们允许程序员在不修改源代码的情况下,添加、修改或扩展函数或类的功能,帮助......