作为一个Pythoner, 不会SQLAlchemy都不好意思跟同行打招呼!

SqlAlchemy使用教程(一) 原理与环境搭建 本文介绍了sqlalchemy 的原理,架构,什么是ORM, 常用术语如metadata, session 等,SqlAlchemy主要版本及特性,最后讲述了如何搭建编程环境。 阅读详情

在这里插入图片描述

import sqlalchemy

import sqlalchemy.orm

import sqlalchemy.ext.declarative

利用数据库字符串构造engine, echo为True将打印所有的sql语句, 其他数据库的链接方式可自行百度

engine = sqlalchemy.create_engine(“mysql+pymysql://username:password@hostname/dbname”, encoding=“utf8”, echo=True)

engine = sqlalchemy.create_engine(“mysql+pymysql://dba_0:mimadba_0@101.200.174.172/data_secret”, encoding=“utf8”, echo=False)

“”"

利用engine创建connection,因为使用了with所以不需要close操作,这部分不是重点

with engine.connect() as conn:

最基础的用法

result = conn.execute(“select * from tablename limit 10;”)

for item in result:

print(item)

execute的几种用法,这里具体还是得参考pymysql的用法,不需要执行commit操作

conn.execute(“insert into tablename(id, url, title) values(1, ‘url1’, ‘title1’);”)

conn.execute(“insert into tablename(id, url, title) values(%s, %s, %s);”, 2, “url2”, “title2”)

conn.execute(“insert into tablename(id, url, title) values(%s, %s, %s)”, (3, “url3”, “title3”))

conn.execute(“insert into tablename(id, url, title) values(%s, %s, %s)”, [(31, “url31”, “title31”), (32, “url32”, “title32”)])

使用事务可以进行批量提交和回滚

trans = conn.begin()

try:

conn.execute(“insert into tablename(id, url, title) values(%s, %s, %s)”, [(4, “url4”, “title4”), (5, “url5”, “title5”)])

trans.commit()

except Exception as excep:

trans.rollback()

raise

trans.close()

“”"

首先需要生成一个BaseModel类,作为所有模型类的基类

BaseModel = sqlalchemy.ext.declarative.declarative_base()

构建数据模型User

class User(BaseModel):

tablename = “Users” # 表名

table_args = {

“mysql_engine”: “InnoDB”, # 表的引擎

“mysql_charset”: “utf8”, # 表的编码格式

}

表结构,具体更多的数据类型自行百度

id = sqlalchemy.Column(“id”, sqlalchemy.Integer, primary_key=True, autoincrement=True)

name = sqlalchemy.Column(“name”, sqlalchemy.String(50), nullable=False)

age = sqlalchemy.Column(“age”, sqlalchemy.Integer, default=0)

添加角色id外键,关联到表Roles的id属性

role_id = sqlalchemy.Column(“role_id”, sqlalchemy.Integer, sqlalchemy.ForeignKey(“Roles.id”))

添加关系属性,关联到本实例的role_id外键属性上

role = sqlalchemy.orm.relationship(“Role”, foreign_keys=“User.role_id”)

添加关系属性,关联到本实例的role_id外键属性上,如果使用了这种方式,Role模型中的users可以省略

role = sqlalchemy.orm.relationship(“Role”, foreign_keys=“User.role_id”, backref=sqlalchemy.orm.backref(“users”))

构建数据模型Role

class Role(BaseModel):

tablename = “Roles” # 表名

table_args = {

“mysql_engine”: “InnoDB”, # 表的引擎

“mysql_charset”: “utf8”, # 表的编码格式

}

表结构,具体更多的数据类型自行百度

id = sqlalchemy.Column(“id”, sqlalchemy.Integer, primary_key=True)

name = sqlalchemy.Column(“name”, sqlalchemy.String(50), unique=True)

添加关系属性,关联到实例User的role_id外键属性上

users = sqlalchemy.orm.relationship(“User”, foreign_keys=“User.role_id”)

利用Session对象连接数据库

DBSessinon = sqlalchemy.orm.sessionmaker(bind=engine) # 创建会话类

session = DBSessinon() # 创建会话对象

删除所有表

BaseModel.metadata.drop_all(engine)

创建所有表,如果表已经存在,则不会创建

BaseModel.metadata.create_all(engine)

try:

清空数据,不需要commit操作

session.query(User).filter(User.id != -1).delete()

session.query(Role).filter(Role.id != -1).delete()

删除数据的另外一种形式:session.delete()

插入数据,这里的一个实例只插入一次,第二次插入不生效

session.add(Role(id=1, name=“student”))

session.add(Role(id=2, name=“teacher”))

session.commit()

session.add(User(name=“James”, age=20, role_id=1))

session.add(User(name=“Wade”, age=40, role_id=2))

session.commit()

user = User(name=“Kobe”, age=24, role_id=1)

session.add(user)

session.commit()

修改数据

user.name = “Allen”

session.merge(user) # 使用merge方法,如果存在则修改,如果不存在则插入

session.query(User).filter(User.id == user.id).update({User.name: “Allen”}) # 使用update方法

session.query(User).filter(User.id == user.id).update({User.age: User.age + 1}) # 使用update方法,自增操作

查询数据

roles = session.query(Role) # 返回全部结果

for role in roles:

print(“Role:”, role.id, role.name)

users = session.query(User) # 返回全部结果

for user in users:

print(“User:”, user.id, user.name, user.age, user.role_id)

其他获取数据的方式

print(“get(id):”, session.query(User).get(1)) # 返回结果集中id为1的项

print(“get[1:3]:”, session.query(User)[1:3]) # 返回结果集中的第2-3项

其他高级查询,这里以Users表为例

users = session.query(User).filter(User.id > 6) # 条件查询

users = session.query(User).filter(User.id > 6).all() # 条件查询,返回查询的全部数据

user = session.query(User).filter(User.id > 6).first() # 条件查询,返回查询数据的第一项

users = session.query(User).filter(User.id > 6).limit(10) # 条件查询,返回最多10条数据

users = session.query(User).filter(User.id > 6).offset(2) # 条件查询,从第3条数据开始返回

users = session.query(User).filter(User.id > 6, User.name == “Kobe”) # 条件查询,and操作

users = session.query(User).filter(User.id > 6).filter(User.name == “Kobe”) # 条件查询,and操作

users = session.query(User).filter(sqlalchemy.or_(User.id > 6, User.name == “Kobe”)) # 条件查询,or操作

users = session.query(User).filter(User.id.in_((1, 2))) # 条件查询,in操作

users = session.query(User).filter(sqlalchemy.not_(User.name)) # 条件查询,not操作

user_count = session.query(User.id).count() # 统计全部user的数量

user_count = session.query(sqlalchemy.func.count(User.id)).scalar() # scalar操作返回第一行数据的第一个字段

session.query(sqlalchemy.func.count("*")).select_from(User).scalar() # scalar操作返回第一行数据的第一个字段

session.query(sqlalchemy.func.count(1)).select_from(User).scalar() # scalar操作返回第一行数据的第一个字段

session.query(sqlalchemy.func.count(User.id)).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表

session.query(sqlalchemy.func.sum(User.age)).scalar() # 求和运算,运用scalar函数

session.query(sqlalchemy.func.avg(User.age)).scalar() # 求均值运算,运用scalar函数

session.query(sqlalchemy.func.md5(User.name)).filter(User.id == 1).scalar() # 运用md5函数

users = session.query(sqlalchemy.distinct(User.name)) # 去重查询,根据name进行去重

users = session.query(User).order_by(User.name) # 排序查询,正序查询

users = session.query(User).order_by(User.name.desc()) # 排序查询,倒序查询

users = session.query(User).order_by(sqlalchemy.desc(User.name)) # 排序查询,倒序查询的另外一种形式

users = session.query(User.id, User.name) # 只查询部分属性

users = session.query(User.name.label(“user_name”)) # 结果集的列取别名

for user in users:

print(“label test:”, user.user_name) # 这里使用别名

users = session.query(sqlalchemy.func.count(User.name).label(“count”), User.age).group_by(User.age) # 分组查询

for user in users:

print(“age:{0}, count:{1}”.format(user.age, user.count))

多表查询

result = session.query(User, Role).filter(User.role_id == Role.id)

for user, role in result:

print(“user %s’s role is %s” % (user.name, role.name))

users = session.query(User).join(Role, User.role_id == Role.id)

for user in users:

print(“user join, name:”, user.name)

关联属性的用法

roles = session.query(Role)

for role in roles:

print(“role:%s users:” % role.name)

for user in role.users:

print("\t%s" % user.name)

users = session.query(User)

for user in users:

print(“user %s’s role is %s” % (user.name, user.role.name))

except Exception as excep:

session.rollback()

raise

session.close()

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案 本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。 阅读详情

相关推荐

Transformers 中的 Softmax 可以并行加速么?

通过融合前两个计算步骤,降低执行Reduce_max和Reduce_sum等操作的通信开销。利用共享内存来存储临时数据,以减少对全局内存的访问成本。

stephen147的博客 1234

【Flask】from flask_sqlalchemy import SQLAlchemy报错

在使用 flask_sqlalchemy 之前,你需要确保已经通过 pip 安装了 Flask-SQLAlchemy。

weixin_56463218的博客 9090

COMSOL实现裂缝性储层油水两相流模拟的关键技术

多孔介质中的流体流动模拟是油气藏开发的核心技术,其基本原理基于达西定律和质量守恒方程。在裂缝性储层中,离散裂缝网络与基质系统的耦合流动带来了特殊的数值挑战。通过COMSOL Multiphysics平台实现的多物理场耦合技术,可以精确模拟油水两相在复杂裂缝系统中的渗流行为。该技术采用Level Set方法表征裂缝几何形态,结合自适应网格生成技术解决狭窄裂缝的网格剖分难题,并创新性地引入Bang-Larsen毛管压力滞后模型,显著提高了采收率预测精度。这些方法在致密油藏开发、水驱优化等工程实践中具有重要应用价

weixin_34005090的博客 229

Python数据库ORM框架SQLALchemy操作数据库简单封装表关系(一对一、一对多、多对多)增删改查crud工具

SQLALchemy是python下操作数据库的工具包,是一个数据库ORM(对象关系映射)框架,使用SQLALchemy可以极大的简化对数据库和数据的操作,使用ORM管理数据更直观方便.这里我记录一次关于sqlalchemy使用的简单实践,包括了创建数据库连接、定义模型、表关系(一对一、一对多、多对多)增删改查、crud工具,最后使用了pytest进行了一些测试.

J_Sky:编程爱好者,又菜又爱玩. 1861

PaddleOCR实战指南:从环境搭建到自定义模型训练

本文提供了PaddleOCR从环境搭建到自定义模型训练的完整实战指南。详细介绍了使用Anaconda或Docker搭建稳定开发环境、准备与标注数据集、进行文本检测与识别模型训练的核心步骤与参数调优技巧,并分享了数据增强、模型微调及解决实际项目难题的实用方法,帮助开发者高效掌握PaddleOCR应用。

gold的博客 644

UE4虚拟现实实习总结---蓝图中的常用交互事件|人物行走|物体移动|动态触发|材质改变

这周是ue4实习周,老师给我们的任务就是基于中学物理和化学实验的虚拟实验室,要有交互事件,后期可以链接vr手柄进行操作。 但是实习开始老师影都没了,全靠自己学习。感觉自己学习了不少东西,这里就来总结一下!顺便感叹一下,ue4好玩又强大! 以下主要介绍蓝图中的几种交互事件1.新建游戏角色并且进行角色行走旋转,2.如何控制物体移动旋转,3.如何控制物体材质动态变化 大家可以举一反三,作出更好的作品 1.新建游戏角色并且进行角色行走旋转 步骤 在刚刚新建的文件夹中鼠标右击新建蓝图类,然后分别创建以下:chara

weixin_43902063的博客 6122

sqlalchemy的两种方法详解

学习sqlalchcemy的用法,基本够用了。

IChocolateKapa 5747

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

ORM框架SQLAlchemy入门

相关资料/官网地址 1、安装sqlalchemy并查看版本 命令行下执行下面语句安装: pip install SQLAlchemy 安装完成后查看版本: import sqlalchemy print(sqlalchemy.__version__) 此外还需要安装PyMySQL,否则在...

chunjusu2447的博客 587

从二体运动到高精度轨道:STK与MATLAB联动的轨道外推算法演进史

本文探讨了轨道外推算法从二体运动到高精度轨道预报(HPOP)的演进历程,重点分析了STK与MATLAB协同仿真环境下的技术实现与应用。通过对比不同算法的精度与适用场景,展示了HPOP在卫星参数优化和轨道设计中的优势,为航天任务规划提供了高效解决方案。

weixin_29082143的博客 700

AutosarMCAL开发——基于TC367、EBTresos 开发之PORT

下图为开漏输出与推挽输出电路区别,推挽输出有两个极性相反的mos构成,一个管子导通另一个管子关闭以实现输出高低电平(电流较小不具备驱动能力),开漏输出仅使用一个MOS管,所以在这种模式下只能输出低电平,想要输出高电平需要外部提供(输入电流不可超过引脚最大电流显示否则会烧MCU)开漏输出:输出寄存器为低电平时,经过输出控制电路变成一个高电平,N-MOS导通,低电平从I/O引脚输出,输出寄存器为高电平时,P-MOS和N-MOS都是截止状态,电平无法通过,想要输出高电平需要外接上拉电阻。

qq_45583706的博客 1406

SqlAlchemy基本使用

     sqlalchemy所依赖的模块 import sqlalchemy import sqlalchemy.orm import sqlalchemy.ext.declarative      连接数据库,利用数据库字符串构造engine, echo为True将打印所有的sql语句 engine = sqlalchemy.create_engine("mysql+...

weixin_30940783的博客 182

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

仙魁XAN 8575

SQLALCHEMY用法详解

  一,SQLAlchemy的安装  使用 $ easy_install sqlalchemy 或 $ pip install sqlalchemy 如果出现什么错,就进去root用户下进行安装试试,或者网上查查 >>> import sqlalchemy >>> 这样说明成功了,切记是小写哦  二,使用  理论我也不懂,自己查查资料,现在用...

kepengs的博客 4365

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SQLAlchemy的使用(一)--基本使用方法

Python SQLAlchemy Cheatsheet : https://www.pythonsheets.com/notes/python-sqlalchemy.html 官方文档:https://docs.sqlalchemy.org/en/latest/orm/tutorial.html 首先 import sqlalchemy 可以这样检查版本 sqlalchemy.__version...

凡凡不知所错 9543

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

在pycharm中用SQLAlchemy实现Python链接数据库

正确安装后会输出SQLAlchemy版本号。安装完成后,就可以在Python代码中引入SQLAlchemy模块,开始使用它提供的数据库操作功能。

m0_61454727的博客 1837

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python ORM框架之sqlalchemy

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码

qq_40494873的博客 2185

Python: SQLAlchemy 增、删、改、查

目录 一、完整代码 1.1 代码 1.2 运行结果 二、增删改查 2.1 增加一行记录 2.2 修改一行记录 2.3 查询一行记录 2.4 删除一行记录 一、完整代码 1.1 代码 import uuid import datetime import sqlalchemy import sqlalchemy.orm as orm from sqlalchemy.ext.declarative import declarative_base Base = declarative_ba

fengbohello的专栏 8351

python里比较流行的ORM框架:sqlalchemy

安装http://docs.sqlalchemy.org1、安装#进入虚拟环境 #执行 ./python3 -m pip installimport sqlalchemyprint(sqlalchemy.__version__) # 1.1.15我这里使用的版本是1.1.15创建连接对象http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#co

1万+

详细分析Python中的SQLAlchemy库(附Demo)

SQLAlchemy 是Python SQL工具包和对象关系映射器(ORM),允许Python开发者在应用程序中使用SQL来交互,而无需处理数据库的具体细节 提供一个高层的抽象层,允许开发者通过Python类和对象来表示数据库中的表和行,从而使得数据库操作更加方便和灵活

码农研究僧的博客 6557

python之sqlalchemy详解

python之sqlalchemy详解 SQLAlchemy连接数据库 可以使用ORM框架操作数据库 ORM框架 = object relationship mappiy 框架 学习前提(软件) mysql、pymysql(或者MySQLdb)、SQLAlchemy SQLAlchemy连接数据库 步骤 首先导入sqlalchemy.create_engine 输入配置信息(服务...

没有撤退可言. 2万+

import SQLAlchemy失败

import SQLAlchemy失败

m0_53243433的博客 1355

在python3.8里import sqlalchemy出错

最近在linux centos里安装了python3.8,也安装了sqlalchemy, 如下所示: [root@localhost Python-3.8.0]# python3 Python 3.8.0 (default, Nov 26 2019, 22:35:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux Type "help", "...

normallife的专栏 2467

SQLAlchemy 学习指南

定义你的数据库模型类:​​​事件和关系add和add_all支持对象事件的触发和复杂的关系映射,而不支持。性能在处理大量数据时性能更好,因为它减少了SQL语句的生成和执行次数。使用场景:如果你需要处理大量数据并且不需要触发事件或处理复杂的关系,是更好的选择。如果你需要事件触发或处理复杂的关系,应该使用add或add_all。# 1 单个add# ]return '添加用户成功!!性能get方法由于是基于主键的检索,通常比filter_by和filter。

ljjpaopao的博客 2559

【Python三方库】Python之SQLAlchemy 库的简介、安装、使用方法、示例代码、注意事项等详细攻略

Python之SQLAlchemy 库的简介、安装、使用方法、示例代码、注意事项等详细攻略。在数据库操作和持久化存储领域,Python 被广泛使用,其中 SQLAlchemy 是一个强大且灵活的 SQL 工具包和对象关系映射(ORM)库。SQLAlchemy 提供简洁易用的接口,使得开发者能够高效地执行数据库查询、数据操作及管理事务。本博客旨在介绍 Python 及其三方库 SQLAlchemy 的详细信息,包括 SQLAlchemy 的安装步骤、示例代码及使用注意事项。

科技改变人类,技术成就未来 1864

sqlalchemy session.close()与session.remove()的区别

操作描述影响使用场景关闭当前会话并释放资源未提交的更改丢失,释放数据库连接在不再需要会话对象时调用从当前线程的注册表中移除会话对象后续获取的会话将是新的会话对象在多线程环境中,结束当前线程的会话使用请注意,由于的remove()方法是针对线程安全的会话管理而设计的,因此它并不直接适用于普通的Session对象。普通的Session对象没有remove()方法,而是使用close()方法来关闭会话。

youhebuke225的博客 1381
上一篇: 这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息
下一篇: 如何用Python瞬间获取LOL官网全英雄皮肤的图片?
Python文泽老师
博客等级 码龄7年 1320粉丝 278原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值