sqlalchemy mysql_使用SQLAlchemy操作MySQL

SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。

本文将介绍如何使用SQLAlchemy操作MySQL,完成基础的表创建,表格数据的新增、查询、修改、删除(CRUD)等操作。

首先我们需要确认当前的Python环境下已经安装sqlalchemy和pymysql模块。

新建表格

我们使用本地的MySQL数据库,数据库为orm_test。新建一张users表,字段为id,name,age,place。完整的Python代码(create_table.py)如下:

# -*- coding: utf-8 -*-

# author: Jclian91

# place: Sanya, Hainan

# time: 12:46

from sqlalchemy.dialects.mysql import INTEGER, VARCHAR

from sqlalchemy import Column

from sqlalchemy import create_engine

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# users表结构

class Users(Base):

__tablename__ = 'users'

id = Column(INTEGER, primary_key=True)

name = Column(VARCHAR(256), nullable=False)

age = Column(INTEGER)

place = Column(VARCHAR(256), nullable=False)

def __init__(self, id, name, age, place):

self.id = id

self.name = name

self.age = age

self.place = place

def init_db():

engine = create_engine(

"mysql+pymysql://root:@localhost:3306/orm_test",

encoding= "utf-8",

echo=True

)

Base.metadata.create_all(engine)

print('Create table successfully!')

if __name__ == '__main__':

init_db()

运行后,生成的users表结构如下:

b2e0e3a95bb02943054a9ab821804404.png

数据插入

接着我们插入几条测试数据,完整的代码(db_insert.py)如下:

# -*- coding: utf-8 -*-

# author: Jclian91

# place: Sanya, Hainan

# time: 12:52

from create_table import Users

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

def insert_data():

# 初始化数据库连接

engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")

# 创建DBSession类型

DBSession = sessionmaker(bind=engine)

# 创建session对象

session = DBSession()

# 插入单条数据

# 创建新User对象

new_user = Users(id=1, name='Jack', age=25, place='USA')

# 添加到session

session.add(new_user)

# 提交即保存到数据库

session.commit()

# 插入多条数据

user_list= [Users(id=2, name='Green', age=26, place='UK'),

Users(id=3, name='Alex', age=31, place='GER'),

Users(id=4, name='Chen', age=52, place='CHN'),

Users(id=5, name='Zhang', age=42, place='CHN')

]

session.add_all(user_list)

session.commit()

# 关闭session

session.close()

print('insert into db successfully!')

if __name__ == '__main__':

insert_data()

运行程序后,表格中的数据如下:

caa65e34fd88a501882dd63a72fc3a37.png

数据查询

接下来演示如何进行简单的查询。我们需要查询place为CHN的人名,完整的Python代码(db_query)如下:

# -*- coding: utf-8 -*-

# author: Jclian91

# place: Sanya, Hainan

# time: 12:52

from create_table import Users

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

def query_data():

# 初始化数据库连接

engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")

# 创建DBSession类型

DBSession = sessionmaker(bind=engine)

# 创建session对象

session = DBSession()

# 查询所有place是CHN的人名

# 创建Query查询,filter是where条件

# 调用one()返回唯一行,如果调用all()则返回所有行:

users = session.query(Users).filter(Users.place == 'CHN').all()

print([use.name for use in users])

# 输出:['Chen', 'Zhang']

# 或者用如下查询

users = session.query(Users.name).filter(Users.place == 'CHN').all()

print(users)

# 输出:[('Chen',), ('Zhang',)]

session.close()

if __name__ == '__main__':

query_data()

输出结果如下:

['Chen', 'Zhang']

[('Chen',), ('Zhang',)]

数据更新

接下来我们演示数据更新。我们需要将Jack的place修改为CHN,完整的Python代码(db_update)如下:

# -*- coding: utf-8 -*-

# author: Jclian91

# place: Sanya, Hainan

# time: 12:52

from create_table import Users

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

def update_data():

# 初始化数据库连接

engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")

# 创建DBSession类型

DBSession = sessionmaker(bind=engine)

# 创建session对象

session = DBSession()

# 数据更新,将Jack的place修改为CHN

update_obj = session.query(Users).filter(Users.name=='Jack').update({"place":"CHN"})

session.commit()

session.close()

print("Update data successfully!")

if __name__ == '__main__':

update_data()

更新后的表格数据如下:

1db546e403859ccf3a1515690f4218e1.png

数据删除

接着我们演示数据删除。我们需要将Jack的记录删除,完整的Python代码(db_delete.py)如下:

# -*- coding: utf-8 -*-

# author: Jclian91

# place: Sanya, Hainan

# time: 12:52

from create_table import Users

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

def delete_data():

# 初始化数据库连接

engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")

# 创建DBSession类型

DBSession = sessionmaker(bind=engine)

# 创建session对象

session = DBSession()

# 数据更新,将Jack的记录删除

update_obj = session.query(Users).filter(Users.name=='Jack').delete()

session.commit()

session.close()

print("Delete data successfully!")

if __name__ == '__main__':

delete_data()

运行程序后,表格中的数据如下:

31d0e3d330863294ad263ae8fa5bef3a.png

本次分享到此结束,感谢大家阅读~

本文的示例代码已经上传至Github,网址为:https://github.com/percent4/ORM_test 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用phpstorm+wamp实现php代码实时调试审计

转载自:https://www.bugbank.cn/q/article/5853afaffc0bf4f010ee6ac3.html php调试有N多好用的工具,最近研究到phpstorm配合wamp实现php实时断点调试相当不错,推荐给大家,网上有各种配置版本,但没有一个能好使的。本文…

python处理字符串数组慢_Python字符串处理 - str/bytes

1. strstr.count(sub[, start[, end]])str.encode(encoding"utf-8", errors"strict")str.format(*args, **kwargs) # s "this is from {}".format(__file__)str.find(sub[, start[, end]]) # 没有查找到子串,返回-1str.rfind(sub[, …

如何使用Play框架为https配置SSL证书

我花了数小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException:对等方未通过身份…

ERP行业销售如何挖掘潜在客户?

要看不同阶段,小企业发展到一定程度,第一个需求是单体财务系统。因为这个时候财务忙不过来了。在大一点就需要业务系统了,就是生产进销存。有分公司就有集团级软件需求,接着就是oa啊HR啊上下游管理啊等等。接着把握住成本的节省和…

网络隔离主要技术

网络隔离:把两个或者两个以上可路由的网络(如:TCP/IP)通过不可路由的协议(如:IPX/SPX、NetBEUI等) 进行数据交换而达到隔离目的。主要原理是使用了不同的协议,故也叫协议隔离。 网络…

mysql 数字to char_mysql数字tochar

例如,指定一个字段的类型为 INT(6), 就可以保证所包含数字少于 6 个的值从...二.字符串类型 MySQL 提供了 8 个基本的字符串类型,分别:CHAR、VARCHAR、......查看当前安装的 MySQL 所支持的字符集。 show charset; 或 show char set; ------------ | Charset | Description | D…

luogu P1880 [NOI1995]石子合并

咕咕咕 说好把济南集训时做的题写写题解还是鸽了然后因为太无聊又来续上了w 传送门~xiu 一道dp 具体是啥dp呢我去看看题解咋说 嗯 区间dp(跟我想的一样 把环拆成链来做 n的范围比较小就直接枚举从哪断开 然后就是正常的dp 区间和用前缀和优化一哈 看代码吧 #include…

数据库更改到Java环境中实现可持续和平

对我们而言,可持续和平消除了不确定性。 在这种情况下,由于数据库更改而引起的想法是欢迎进行Ruby的Active Record迁移 。 迁移对我们意味着什么? 嗯,这是一种方便快捷的方法,可以以一致且简单的方式来改变我们的数据…

js页面加载前执行_做一名合格的前端开发工程师:Javascript加载执行问题探索

做前端开发少不了各种利器。比如我习惯用的还是Google浏览器和重型武器Fiddller。一:原始情况 首先大家看看如下的代码:估计90%的程序员都会把js文件放在head中,但是大家有没有深究过呢?很多浏览器都会使用单一的线程来做“界面UI…

【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)

title: 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension) categories: MathematicLinear Algebra keywords:IndependenceBasisDimensionSpan toc: true date: 2017-09-25 15:20:46Abstract: 本文是本章最重要的知识点,也是整个线性代…

Leetcode 648.单词替换

单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。 现在…

APP网络测试要点和弱网模拟

当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。另外,当前app使用场景多变,如进地铁、上公交、进电梯等,使…

homebrew mysql conf_homebrew 安装mysql后,如何配置mysql

这个是我最新并且一直推崇的方法:1、安装:sunyichaodeMacBook-Pro:~ sunyichao$ brew install mysql2、开启mysql:mysql.server start2、使用mysql的配置脚本:/usr/local/opt/mysql/bin/mysql_secure_installation //mysql 提供的…

word公式插件_再也不用担心我的公式写不出来了:一款公式输入神器实测

→ → https://mp.weixin.qq.com/s/gNRWdN-W4_Eb2MyyTpWzjw关注微信公众号:人工智能前沿讲习,重磅干货,第一时间送达本文推荐一个公式输入神器,只要截图就能识别公式,手写的公式都能识别。经过实测,几乎没有…

使用Camel在Amazon上构建分布式工作流应用程序

带有SNS-SQS的管道 工作流由按动态条件确定的特定顺序执行的独立任务组成。 工作流通常代表业务流程,例如电子商务商店中的订单处理步骤。 Amazon Web Services提供了各种工具来构建分布式和可扩展的工作流应用程序。 构建此类应用程序的一种方法是使用主题和队列来…

表单外部提交

外部按钮提交&#xff1a; html&#xff1a; <form method"post" name"sort">.......</form> <button type"button" class"btn btn-sm btn-azure btn-addon" οnclick"javascript:document.sort.submit()"&…

使用stylus

1. 首先确保 node npm 环境一切正常。 2. 全局安装 stylus&#xff1a; 在命令行中&#xff1a; npm i styluslatest -g 3. 此时可以创建 .styl 文件&#xff0c; 并进行编辑。 4. 使用命令 将 .styl 文件 编译为 .css 文件&#xff1a; stylus -c path/to/in…

mysql 高版本检索外键_第05期:外键到底能不能用?

外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。外键在大部分企业写的开发规范里会直接规避掉&#xff01;外键有优缺点&#xff0c;也并不是说每种场景都不适用&#xff0c;完全没有必要一刀切。外键到底能不能用&#xff1f;下面会针对…

python重启路由器_Python3控制路由器——使用requests重启极路由.py

通过本文给大家介绍Python3控制路由器——使用requests重启极路由.py的相关知识&#xff0c;代码写了相应的注释&#xff0c;以后再写成可以方便调用的模块。用fiddler抓包可以看到很多HTTP头&#xff0c;经过尝试发现不是都必须的。Upgrade-Insecure-Requests:1,#必要项&#…

从Ant Build演进Gradle Build:导入Ant Build文件

在大型项目上更改构建系统可能很困难并且需要大量工作。 幸运的是&#xff0c;对于那些将Ant版本迁移到Gradle版本的人&#xff0c;Gradle提供了特别方便的机制来促进这种迁移 。 由于Gradle基于Groovy构建&#xff0c;并且Groovy通过AntBuilder包含内置的Ant支持&#xff0c;因…