最新要闻
- 神十六有航天飞行工程师和载荷专家:戴眼镜也能上太空了-天天快看点
- 红魔电竞显示器2K银翼版618优惠300元:240Hz超高刷 环球新消息
- 头条焦点:12点正式开始!天猫618红包首发 超高概率中现金红包
- 世界快看:改款将至?曝特斯拉上海工厂Model 3产线停工:价格或将调整
- 世界今头条!官宣2030年前登月 我国面向全社会征集载人月球车研制方案
- 丰立智能:5月26日融资净买入2470.32万元,连续3日累计净买入4969.34万元
- 【世界新视野】抖音打不开视频怎么回事_抖音打不开
- 当前要闻:山姆同款蛋糕杭州卖165上海卖95 网友直呼太坑:你遇到过吗
- 绵云般口感!和路雪千层雪冰淇淋3.5元官方大促(商超6元)
- 今年唯一LCD性能机!Redmi Note 12T Pro外观公布-当前独家
- 重点聚焦!研究称每天排便超一次或影响健康:心力衰竭风险增加33%
- 全球快资讯丨接近小米1英寸了!曝iPhone 16 Pro Max主摄大升级
- “候鸟”老人现在是否可以在海南澄迈县买房子?深蓝苑·滨江城PK五指山森林湖养老分析!|焦点简讯
- 神舟十六号30日9时31分发射:三名航天员名单公布 首次有大学教授
- 华为畅享60X根治续航焦虑!充电宝完全派不上用场了
- 全球微资讯!华为智选车终于出轿车 奇瑞EH3谍照曝光:华为ADS摄像头瞩目
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Python工具箱系列(三十四)
SQLAlchemy是著名的ORM(Object Relational Mapping-对象关系映射)框架。其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。对许多语言(例如JAVA/PYTHON)来说就是定义一个对象,并且这个对象对应着一张数据库的表。而这个对象的实例,就对应着表中的一条记录。
其整体思路如下图所示:
(资料图片仅供参考)
其中类、对象与属性与数据库相关内容的对应关系如下图所示:
ORM的优点:
数据模型与代码统一定义,更新与维护简单,代码高度重用一致。
ORM有现成的工具,很多功能都可以自动完成,比如表格增删、预处理、事务等。
基于ORM的业务代码比较简单,代码量少,语义性好,容易理解。
你不必编写性能不佳的SQL。
ORM的缺点:
ORM库多层封装,实现巧妙,需要花很多精力学习和设置。
对于复杂的查询,ORM要么是无法表达,要么是性能不如原生的SQL。
ORM抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的SQL。
从整体上看,ORM节省了开发时间,减少了代码错误的可能性,同时能够方便地在多个数据库间灵活迁移,还是非常值得使用。而在python语言中,SQLAlchemy是著名的ORM框架之一,它的整体架构如下图所示:
从图中可以看出,SQLAIchemy是分层架构,由Core以及ORM两部分组成。其中,Core完成了与数据库操作的各类封闭,是相对低层的。而ORM层则利用Core层的能力进行更宏观的操作。因此,在一段python代码中,使用Core与ORM层同时来操作数据库也是可行的,并不矛盾与冲突。
下面先从最基本的表格创建做起。非ORM编程中,表格的创建无非两个途径:
●基于DBMS本身提供的CLI/GUI界面,发出DDL语句进行数据库/表格本身的增删改查。
●使用语言连接数据库后,发出命令来对数据库/表格进行增删改查。
而由于每种数据库都有自己的方言,所以命令语句各有差异,需要不断地调整。而使用SQLAlchemy则实现了代码统一。例如以下代码在mssql以及mysql上创建表格,并且可以查询表格的元数据,以及插入数据后的查询。
from sqlalchemy import (Column, Integer, MetaData, String, Table, create_engine, text, Float, DateTime, ForeignKey)from sqlalchemy_utils.functions import create_database, database_existsconfigure_pg = {"user": "postgres", "password": "88488848", "dns": "dbserver.home", "port": 5432, "prefix": "postgresql+psycopg2", "postfix": "" }configure_mssql = {"user": "sa", "password": "88488848", "dns": "dbserver.home", "port": 1433, "prefix": "mssql+pymssql", "postfix": "?charset=utf8" }configure_mysql = {"user": "root", "password": "88488848", "dns": "dbserver.home", "port": 3306, "prefix": "mysql+mysqlconnector", "postfix": "" }config = {"mssql": configure_mssql, "mysql": configure_mysql, "postgresql": configure_pg}database_name = "testdb"table_sensor_location = "sensor_location"table_sensor_data = "sensor_data"def linkdb(targetstr): """ 连接不同的数据库 Args: targetstr (string): 数据库名称 Returns: engine: 用于后续的数据库连接 """ if targetstr in config.keys(): item = config[targetstr] connectstring = f"{item["prefix"]}://{item["user"]}:{item["password"]}@{item["dns"]}:{item["port"]}/{database_name}{item["postfix"]}" engine = create_engine(connectstring, echo=True, future=True) # 如果数据库不存在,则创建之 if not database_exists(engine.url): create_database(engine.url) # 做一个测试,不针对任何表 with engine.connect() as conn: result = conn.execute(text("select "hello world"")) print(result.all()) return enginedef createtbs(connector): """" 创建数据库中的2张表。用于保存传感器数据与传感器本身的信息 """ metadata_obj = MetaData() # 描述传感器的表 sensor_location_tb = Table( table_sensor_location, metadata_obj, Column("id", Integer, primary_key=True, autoincrement=False), Column("location", String(30), nullable=False) ) # 保存传感器数据的表 sensor_data_tb = Table( table_sensor_data, metadata_obj, Column("id", Integer, primary_key=True, autoincrement=False), Column("sensor_id", ForeignKey( f"{table_sensor_location}.id"), nullable=False), Column("area", String(30)), Column("pm25", Float), Column("timestamp", DateTime) ) print(sensor_data_tb.compile()) # 创建并返回表 metadata_obj.create_all(connector) return sensor_data_tb, sensor_location_tbdef tableinfo(connector, tablename): """ 获得指定表名的相关元数据信息 Args: connector (engine): 数据库连接器 tablename (string): 要查询的表名 """ metadata_obj = MetaData() some_table = Table(tablename, metadata_obj, autoload_with=connector) print([c.name for c in some_table.columns])def gensonsorinfo(connector): with connector.connect() as conn: conn.execute(text(f"INSERT INTO {table_sensor_location} (id, location) VALUES (:x, :y)"), [{"x": 1, "y": "1号楼"}, {"x": 2, "y": "2号楼"}]) conn.commit() result = conn.execute( text(f"SELECT id, location FROM {table_sensor_location}")) for x, y in result: print(f"id: {x} location: {y}")# 依次连接多个数据库。从而验证代码的一致性for dbname in config.keys(): con = linkdb(dbname) createtbs(con) tableinfo(con, table_sensor_data) tableinfo(con, table_sensor_location) gensonsorinfo(con)
从代码可以看出,可以用统一的访问方式来操作mssql/mysql/postgresql三种数据库。而且,以上方式与前文中的基于游标的写法类似。
关键词:
-
焦点日报:基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验
简介实验包含**2**部分:1 基于Mindspore框架的模型本地训练及预测2 基于Modelarts平台和PyTorch框架的模
来源: Python工具箱系列(三十四)
环球热头条丨U3DFrameWorkDemo:四、资源打包和热更
焦点日报:基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验
神十六有航天飞行工程师和载荷专家:戴眼镜也能上太空了-天天快看点
红魔电竞显示器2K银翼版618优惠300元:240Hz超高刷 环球新消息
头条焦点:12点正式开始!天猫618红包首发 超高概率中现金红包
世界快看:改款将至?曝特斯拉上海工厂Model 3产线停工:价格或将调整
世界今头条!官宣2030年前登月 我国面向全社会征集载人月球车研制方案
丰立智能:5月26日融资净买入2470.32万元,连续3日累计净买入4969.34万元
Docker 学习笔记
过滤器链及责任链设计模式 观热点
阿里一面:MySQL 单表数据最大不要超过多少行?为什么?这样回答满分! 世界热消息
gps网络时间服务器(时间同步装置)助力电力信息化建设|世界观焦点
deepin-for-arm64支持
全球关注:债市观察:利好钝化收益率窄幅波动 十债2.7%踌躇踏步
【世界新视野】抖音打不开视频怎么回事_抖音打不开
当前要闻:山姆同款蛋糕杭州卖165上海卖95 网友直呼太坑:你遇到过吗
绵云般口感!和路雪千层雪冰淇淋3.5元官方大促(商超6元)
今年唯一LCD性能机!Redmi Note 12T Pro外观公布-当前独家
重点聚焦!研究称每天排便超一次或影响健康:心力衰竭风险增加33%
全球快资讯丨接近小米1英寸了!曝iPhone 16 Pro Max主摄大升级
“候鸟”老人现在是否可以在海南澄迈县买房子?深蓝苑·滨江城PK五指山森林湖养老分析!|焦点简讯
JS中的arguments
今日视点:关于切片参数传递的问题
天天视点!十大券商看后市:A股底部特征浮现 市场进一步下行空间较小
神舟十六号30日9时31分发射:三名航天员名单公布 首次有大学教授
华为畅享60X根治续航焦虑!充电宝完全派不上用场了
全球微资讯!华为智选车终于出轿车 奇瑞EH3谍照曝光:华为ADS摄像头瞩目
世界今热点:小屏4K“天花板”优派推出新款23.8英寸显示器 1999元
神十六乘组公布:载荷专家将首登天宫-动态
搜狐汽车全球快讯 | 比亚迪或考虑在法国建厂 比亚迪:正评估建厂可行性-全球资讯
【独家】Linux工作原理2常用基本命令和目录层次结构
618开车神价 爱国者4TB PCIe 4.0硬盘999元(国产长寿TLC闪存)-全球今亮点
特斯拉、丰田、BBA等都靠边!离开中国:世界无法生产电动车电池 当前观点
苹果iPhone销冠地位稳如泰山 今年618攻略请收好
热消息:央视网评《家有儿女》疑似被恶意评分:小心网络评分变“粉黑大战”
山东舰穿越台湾海峡北上,台军兵推双航母“攻台”_今日热讯
【读财报】三年期互联网主题基金透视:天弘基金业绩垫底 长盛基金风格较激进
天天快消息!内存频率、容量继续狂飙 科赋宣布DDR5-8600:单条48GB
环球今亮点!史上最大屏!iPhone 16 Pro系列确认6.3/6.9英寸屏幕
LCD党福音!Redmi Note 12T Pro跑分出炉:搭载天玑8200-Ultra
每日资讯:101岁杨振宁在西湖大学致辞 给自己打分还不错 张朝阳赞其超越霍金
网络授课用什么软件好 网络授课用什么软件
【世界独家】读数据压缩入门笔记01_数据压缩导读
苹果iOS 17超前瞻 近年来最没存在感的一代?
印度官员为找手机抽掉水库210万升水!最后工作没了|当前时讯
天天热议:iPhone 15即将量产 富士康重金招人:每人3500元奖金
焦点热议:百元股上新 双元科技申购
CISCN_Dozer战队wp
环球新资讯:AutoCAD所有版本总结、序列号密钥总结大全(转载)
ZooKeeper论文阅读笔记 焦点关注
滚筒洗衣机真的比波轮的更好吗?一文读懂
死亡风险直降12%!爱发朋友圈 竟然更长寿 环球观焦点
猫咪为什么要花那么多时间梳理毛发?只是臭美吗?_速看
世界短讯!我父亲配享太庙是谁的台词
重庆长城宽带价格表_重庆长城宽带
银行汇票的付款人是谁_银行本票的有效期限为1个月 而其提示付款期限为自出票日起最长不
王老吉百家姓氏罐大促:12罐到手价29.9元
祭祀的拼音_祭祀怎么读
Oracle 死锁与慢查询总结
当前关注:天津聚力产业链优势打造信创产业基地
全球今头条!丫丫启程回京:将返回北京动物园
当前热议!Unity的Undo:详解解析与实用案例
「学习笔记」(扩展)中国剩余定理
2023-05-28:为什么Redis单线程模型效率也能那么高?|通讯
9)子查询
女模特为长高做手术“打断”腿两次:163变180 如踩高跷
网购虾条居然收到了差评返现卡:主打的就是真诚_热点
热头条丨女生一条微信状态让初中班主任找到:他像太阳一样照耀着大家
资讯推荐:猫眼端午档观众最想看的电影!《消失的她》即将上映:倪妮主演
当前热门:世乒赛战报:陈梦/王艺迪、王楚钦/樊振东夺冠,中国包揽5冠
Doris(三) -- 索引_世界快看点
梅西、迪玛利亚领衔!阿根廷国家队中国行名单公布|关注
南京玄武湖隧道内一辆宝马5系突发自燃 浓烟蔓延数百米_时快讯
哦?上一轮G7塔图姆刚刚刷新历史记录轰了51分! 天天新视野
6年了!iPhone 15无线充电迎来升级:支持Qi2标准 速讯
安卓性能最强旗舰!iQOO Neo8 Pro下周开卖:3099元起 新要闻
马云励志人生正能量八句话_马云的八句经典语录
天天关注:系统设计:从零用户扩展到百万用户
观热点:想买洗地机的用户必看:一文让你读懂洗地机
小米Civi 3上16+1TB大存储!雷军:中端机这么猛|环球简讯
《家有儿女》疑似被恶意打分:网络评分还可信吗?
“靠天吃饭”的水电如何“旱涝保收”?清洁能源助力迎峰度夏
大模型全情投入,低代码也越来越清晰
游泳时 千万不要穿白色和蓝色的泳衣 真的很危险! 世界播报
自营牧场:辉山纯牛奶7.6元/L大促 速囤-当前头条
C919飞机上有五福临门主题餐:内含上海特产大白兔牛奶
腾讯又一手游没了!《街头篮球》国服宣布7月停服
子午觉是睡眠养生之法 子午觉其中的子时和午时分别指的是-全球微速讯
世界观点:时隔6年姗姗来迟!《极限竞速》新作封面图终于公布
格局打开!波音官方庆祝C919首航成功
结转销售成本会计分录怎么写_结转销售成本会计分录
抱紧华为大腿一年 赛力斯挤进新势力前三:但还未跨过生死线|天天新要闻
世界今日报丨《西游ABC》IGN 8分:吴彦祖演技精湛 神话故事迷人
10万级大五座纯电轿车 宝骏云朵信息公开:无模组电池放心跑_全球热消息
深入分析:近端梯度下降法、交替方向乘子法、牛顿法
快看点丨30年老律师用ChatGPT旁征博引:结果被骗得禁止执业!
WinXP问世22年后 黑客发布离线激活算号器:强大程度被低估了
见证历史!国产大飞机C919首航顺利降落
西藏拉萨:藏式克朗球协会正式成立