前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >专栏:012:没时间解释了,快使用sqlalchemy

专栏:012:没时间解释了,快使用sqlalchemy

作者头像
谢伟
发布于 2018-06-06 03:48:30
发布于 2018-06-06 03:48:30
85700
代码可运行
举报
文章被收录于专栏:GopherCoderGopherCoder
运行总次数:0
代码可运行

用理工科思维看待这个世界

系列爬虫专栏

崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。

今天的主题是:sqlalchemy的使用(这是一篇没有真正实战的博文)

0:框架

序号

内容

说明

01

概念解释

是什么?

02

代码解释

怎么做?

03

总结

如何做的?


1:概念

  • ORM 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

图片显示:对象和数据库之间的映射

1462796986482.png

原理:

1462797367071.png

  • SQLAlchemy 是python的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具。(需要安装第三方库) 官方文档
  • 为什么会出现这种技术? 一句话解释:为了避免写繁复的sql语句.(隐藏数据库,良好的数据接口,动态的数据映射,引入缓存)

2:代码解释

一般步骤:

  • 创建连接
  • 声明映射文件
  • 创建模式
  • 初始化映射类实例
  • 创建回话
  • 持久化实例对象

1:创建连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import create_engine
engine = create_engine("mysql://root:123456@localhost:3306/test?charset=utf8", echo = True)

# echo= True 会打印操作数据库的信息

Database_urls 的组成形式: dialect+driver://username:password@host:port/database 举例:

  1. mysql://root:123456@localhost:3306/test
  2. postgresql://scott:tiger@localhost/mydatabase
  3. oracle://scott:tiger@127.0.0.1:1521/sidname
  4. sqlite:///foo.db 具体参见:点我点我

2:声明映射文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(10))
    password = Column(String(10))

    def __repr__(self):
        return "<User(name='%s', name='%s', password='%s')>" % (self.name, self.name, self.password)

# 以上声明了表文件的形式:表名为:users, 包含3列:id, name, password,且定义了数据类型

3:创建数据库表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User.metadata.create_all(engine)
# 运行后会在本地mysql数据库中创建这个数据库表

---
结果显示:
2016-05-09 20:52:38,062 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2016-05-09 20:52:38,091 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,094 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2016-05-09 20:52:38,094 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,114 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin'
2016-05-09 20:52:38,114 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,116 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2016-05-09 20:52:38,117 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,127 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2016-05-09 20:52:38,128 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,158 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin AS anon_1
2016-05-09 20:52:38,158 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,160 INFO sqlalchemy.engine.base.Engine DESCRIBE `users`
2016-05-09 20:52:38,160 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,168 INFO sqlalchemy.engine.base.Engine ROLLBACK
2016-05-09 20:52:38,170 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE users (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    name VARCHAR(10), 
    password VARCHAR(10), 
    PRIMARY KEY (id)
)


2016-05-09 20:52:38,171 INFO sqlalchemy.engine.base.Engine ()
2016-05-09 20:52:38,655 INFO sqlalchemy.engine.base.Engine COMMIT

数据库test中生成表数据:

1462798497039.png

4:创建会话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()

5:持久化实例对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ed_user = User(id=1, name='xiexiaolu', password='dianwo')
session.add(ed_user)
session.commit()

数据显示:插入一条数据

1462798847878.png

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询操作
user=session.query(User).filter(User.id ==1).one()
print(user.name)
print(user.password)
# output: id =1 的数据的 name 和 password
xiexiaolu
dianwo

创建数据表的其他方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import Table, MetaData, create_engine

engine = create_engine("mysql+mysqlconnector://root:123456@localhost:3306/test")
metadata = MetaData()

t1 = Table('users',
metadata,
Column('id',INT, primary_key=True),
Column('name', String(20)),
Column('fullname', String(50)),
Column('password', String(20))
) 
t2 = Table('address',
metadata, 
Column('id',INT, primary_key = True), 
Column('email_address',String(50), nullable=False),
Column('user_id', INT, ForeignKey('users.id'))
) 
metadata.create_all(engine)
# 创建两个数据表分别为users 和 address

插入数据的其他方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在建立的会话基础上执行sql语句
session.execute('insert into users values(2,"Bob","budian")')
session.commit()

# 使用映射类成员变量的数据
user = User(id="3", name="alice", password="hgf")
session.add(user)
session.commit()

查询操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
users = session.query(User).all()# 返回数据表所有数据

修改数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在会话的基础上执行sql语句
session.execute('update addresses set user_id = 1 where id = 2')
session.commit()

# 使用映射类成员变量的数据
session.query(Address).filter(Address.id == 2).update({"user_id": 1})

3:总结

参考文献: 参考文献 参考文献 参考文献

一切为了精进.


新搭建的博客:Xie-xiaolu 预览界面:

1462802927993.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.05.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
[程序设计语言]-01:引言
1.机器语言>汇编语言>高级语言 语言是人与人的一种交流工具,就比如我现在用汉语来写这篇博文来交流探讨技术问题;程序设计语言也是如此,只是交流对象不是人而是机器。我可以用汉语来写博文,也可以用英语来写(假如我英语熟练);我可以用PHP来写一个网站,也可以用ASP.NET来写。这就说明语言的本质就是一种交流工具,而我选择哪种语言来交流并不会影响我要的结果。然而在实际中到底要选用那个语言确要根据具体情况而定,这是个成本问题,比如我如果今天脑子抽筋要用日语,那我写着也累(关键是也不会)、读者或许也会骂娘了。 早期
blackheart
2018/01/19
5850
[程序设计语言]-01:引言
【愚公系列】软考中级-软件设计师 012-程序设计语言基础知识(概述)
程序设计语言是一种用来描述计算机程序的语言,它定义了一组语法规则和语义规则,用于表示和传达计算机程序的逻辑结构和操作步骤。程序设计语言允许程序员以可读性强的方式编写计算机程序,并且能够通过编译器或解释器将程序转换为计算机能够理解和执行的机器语言指令。常见的程序设计语言包括C、C++、Java、Python等。不同的程序设计语言拥有不同的特性和适用场景,可以用于开发各种类型的应用程序。
愚公搬代码
2024/01/24
3010
【愚公系列】软考中级-软件设计师 011-程序设计语言基础知识(考点简介)
程序设计语言基础是指程序设计语言的基本概念、语法和语义。了解程序设计语言基础可以帮助我们理解和使用不同的编程语言,并能够编写简单的程序。
愚公搬代码
2024/01/23
3240
程序设计语言介绍及调试技巧
什么是计算机程序? 答:所谓的程序就是计算机能识别和执行的指令,每一条指令使计算机执行特定的操作,程序和指令是计算机系统中最基本的概念。
全栈工程师修炼指南
2020/10/23
7340
程序设计语言介绍及调试技巧
[程序设计语言]-[核心概念]-03:控制流
0.概述 前面介绍了语言的演进以及一些基础概念后,从本篇开始进入了语言的核心问题中。这一篇讨论的是语言计算模型(大致可以用控制流来表述),大致如下7种: 顺序执行:最基本的流程控制,按部就班的一条一条按顺序执行; 选择:根据运行时的某些条件来决定执行那些,如if else等; 迭代:反复(或特定次数)的执行一段代码,如for循环; 过程抽象:把一段代码抽象成一个简单的过程单元,用来完成某项特定的代码逻辑(后续第5篇博客子程序和控制抽象讨论); 递归:一个表达式直接或者间接的调用自身; 并发:两个或更多程序片
blackheart
2018/01/19
2.1K0
《类型和程序设计语言》
类型理论在程序设计语言的发展中起着举足轻重的作用,成熟的类型系统可以帮助完善程序设计本身,帮助运行系统检查程序中的语义错误。
用户3157710
2018/10/10
1.1K0
《类型和程序设计语言》
人工智能程序设计语言主要有哪些?
典型的人工智能语言主要有LISP、Prolog、Smalltalk、C++等。 一般来说,人工智能语言应具备如下特点: ·具有符号处理能力(即非数值处理能力); ·适合于结构化程序设计,编程容易; ·具有递归功能和回溯功能; ·具有人机交互能力; ·适合于推理; ·既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。 在人工智能手册中介绍了七种人工智能语言: LISP,PLANNER,CINNIVER,QLISP,POP-2,SAIL,FUZZY。近百种人工智能语言中,只有LIS
wangxl
2018/03/08
2.4K0
程序设计语言概述_c语言程序设计基本概念
3. 使用过javascript,Python,PHP:经历过其代码和类型在运行时的自由性
全栈程序员站长
2022/09/20
1.6K0
[零] JavaIO入门简介 程序设计语言 为什么需要IO库
本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点
noteless
2018/09/11
4790
[零] JavaIO入门简介 程序设计语言 为什么需要IO库
面向对象程序设计
【面向对象程序设计】(OOP)与【面向过程程序设计】在思维方式上存在着很大的差别。【面向过程程序设计】中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作。而【面向对象程序设计】却调换了这个次序,【面向对象程序设计】将数据放在第一位,然后再考虑操作数据的算法。
真正的飞鱼
2023/04/13
2.1K1
飞龙的程序员书单 – 编程语言
丢掉老谭的那本书吧,这本书才是最好的入门书。这本书两百多页,语言简洁,但又覆盖到了C语言的每个方面。然而这本书不仅仅讲解C语言,还附带讲解了二分查找、快速排序、二叉树、哈希表这些重要的数据结构和算法。甚至为了解释让人头疼的复杂声明,写了一个递归下降的parser。就算你不是拿此书入门的,也可以放在手头当作参考书来用。
ApacheCN_飞龙
2019/02/15
9860
Go 语言推荐书籍(2023)
Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。 快速、现代的编程语言能让业余爱好者、初学者和专业人员都受益。你需要的正是这样的语言。
kcodez
2023/02/27
2.6K1
Go 语言推荐书籍(2023)
[程序设计语言]-[核心概念]-04:数据类型
0. 概述 为何高级语言需要类型系统这个概念?在汇编时代是没有完整的数据类型系统的,结构化编程引入了结构化的控制流、为结构化设计的子程序,随之这种结构化的代码所操作的数据也进一步的“抽象化、特化”,故而有了数据类型这种概念,类型系统主要用于两个用途: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文。比如int类型的两个对象相加就是整数相加、两个字符串类型的对象相加就是拼接字符串、C#中new object()隐含在背后的就是要分配内存返回对象的引用等等。 类型描述了其对象
blackheart
2018/01/19
1.1K0
Go程序设计语言 1.1 Hello,World(1)
我们将会从经典的“Hello,World”示例来开始(嗯,经典到从The Beginning of The C Programming language, 出版于1978年)。C语言对于Go语言的影响最深,“Hello World”就能够说明很多的中心思想
用户2353021
2020/05/09
6150
[程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
1.名字、约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有名字的东西,比如变量、常量、类型、子程序、模块等等。第二个是“抽象的”,因为我们讨论的是语言的核心概念,所以“抽象的”具体指代的是语言特征与任何计算机体系结构分离的程度。 如果可以给名字下个定义,那么它是代表某东西的一些助记字符序列。就好比张三、李四,对应到大部分语言中一般可以等价为“标识符”。名字可以让我们用一个符号来表示变量、子程序、类型等等,其实
blackheart
2018/01/19
1.1K0
[程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
面向对象程序设计的由来
最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据。简单来说,就是直接编写 0 和 1 的序列来代表程序语言。例如:使用 0000 代表 加载(LOAD),0001 代表 存储(STORE)等。 机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你发现自己 写错了,改起来更蛋疼!这样直接导致程序编写效率十分低下,编写程序花费的时间往往是实际运行时间 的几十倍或几百倍。 有一个关于机器语言和比尔盖茨的笑话,是说比尔盖茨拿着绣花针在一张光盘上戳,把 Windows 给戳出 来了!但如果真的让你去戳,不要说 Windows,连一个简单的“Hello world”都要让人戳到眼睛冒烟!
py3study
2020/01/15
6780
C加加的学习方法!
学习C++重在理解其各种语言设施所代表的语义,以及C++所能表示的语义所代表的设计思想。首先从宏观上入手,你需要明白的是C++是程序设计语言的本质。在此我把C++最重要的性质写下来:C++是一门静态类型检查,基于C内存模式,支持四种基本程序设计范型的语言。注意,这里说明了三个本质特性,静态说明了语言的类型检查性质,基于C内存模式告诉我们在C++中所有与内存有关的操作都需要程序员自己来负责,这样就带来了很多设计程序时的需要注意的地方,而理解支持的四种基本范型却是理解各种语言设施的基础。 分享之前我还是要推
企鹅号小编
2018/01/24
8830
超酷汇编教程-- 简明x86汇编语言教程(1)
大家好,又见面了,我是你们的朋友全栈君。第○章 写在前面 我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一种“常用”的具有“快速原型开发”能力的语言,却也是我们可以选择的语言中的一种。
全栈程序员站长
2022/06/25
7490
Java程序设计(Java9版):第0章 绪论(Introduction)
第0章 绪论(Introduction) 千里之行始于足下。 —-《道德经》 Man is still the most extraordinary computer of all.
程裕强
2018/01/02
1.1K0
Java程序设计(Java9版):第0章 绪论(Introduction)
【愚公系列】软考高级-架构设计师 030-计算机语言
计算机语言,也称为编程语言,是介于人与计算机之间的通信媒介。这种语言包括一系列的规则和约定,旨在编写程序,从而指导计算机执行必要的操作和计算步骤。计算机语言的设计不仅使得人们能够通过编程控制机器进行各种计算和任务,还有助于优化和简化编程过程。
愚公搬代码
2024/06/16
2110
推荐阅读
相关推荐
[程序设计语言]-01:引言
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验