重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本教程介绍了使用 Godatabase/sql及其标准库中的包访问关系数据库的基础知识。
创新互联专业为企业提供上党网站建设、上党做网站、上党网站设计、上党网站制作等企业网站建设、网页设计与制作、上党企业网站模板建站服务,十年上党做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
您将使用的database/sql包包括用于连接数据库、执行事务、取消正在进行的操作等的类型和函数。
在本教程中,您将创建一个数据库,然后编写代码来访问该数据库。您的示例项目将是有关老式爵士乐唱片的数据存储库。
首先,为您要编写的代码创建一个文件夹。
1、打开命令提示符并切换到您的主目录。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,为您的代码创建一个名为 data-access 的目录。
3、创建一个模块,您可以在其中管理将在本教程中添加的依赖项。
运行go mod init命令,为其提供新代码的模块路径。
此命令创建一个 go.mod 文件,您添加的依赖项将在其中列出以供跟踪。
注意: 在实际开发中,您会指定一个更符合您自己需求的模块路径。有关更多信息,请参阅一下文章。
GO语言(二十五):管理依赖项(上)
GO语言(二十六):管理依赖项(中)
GO语言(二十七):管理依赖项(下)
接下来,您将创建一个数据库。
在此步骤中,您将创建要使用的数据库。您将使用 DBMS 本身的 CLI 创建数据库和表,以及添加数据。
您将创建一个数据库,其中包含有关黑胶唱片上的老式爵士乐录音的数据。
这里的代码使用MySQL CLI,但大多数 DBMS 都有自己的 CLI,具有类似的功能。
1、打开一个新的命令提示符。
在命令行,登录到您的 DBMS,如下面的 MySQL 示例所示。
2、在mysql命令提示符下,创建一个数据库。
3、切到您刚刚创建的数据库,以便您可以添加表。
4、在文本编辑器的 data-access 文件夹中,创建一个名为 create-tables.sql 的文件来保存用于添加表的 SQL 脚本。
将以下 SQL 代码粘贴到文件中,然后保存文件。
在此 SQL 代码中:
(1)删除名为album表。 首先执行此命令可以让您更轻松地稍后重新运行脚本。
(2)创建一个album包含四列的表:title、artist和price。每行的id值由 DBMS 自动创建。
(3)添加带有值的四行。
5、在mysql命令提示符下,运行您刚刚创建的脚本。
您将使用以下形式的source命令:
6、在 DBMS 命令提示符处,使用SELECT语句来验证您是否已成功创建包含数据的表。
接下来,您将编写一些 Go 代码进行连接,以便进行查询。
现在你已经有了一个包含一些数据的数据库,开始你的 Go 代码。
找到并导入一个数据库驱动程序,该驱动程序会将您通过database/sql包中的函数发出的请求转换为数据库可以理解的请求。
1、在您的浏览器中,访问SQLDrivers wiki 页面以识别您可以使用的驱动程序。
2、使用页面上的列表来识别您将使用的驱动程序。为了在本教程中访问 MySQL,您将使用 Go-MySQL-Driver。
3、请注意驱动程序的包名称 - 此处为github.com/go-sql-driver/mysql.
4、使用您的文本编辑器,创建一个用于编写 Go 代码的文件,并将该文件作为 main.go 保存在您之前创建的数据访问目录中。
5、进入main.go,粘贴以下代码导入驱动包。
在此代码中:
(1)将您的代码添加到main包中,以便您可以独立执行它。
(2)导入 MySQL 驱动程序github.com/go-sql-driver/mysql。
导入驱动程序后,您将开始编写代码以访问数据库。
现在编写一些 Go 代码,让您使用数据库句柄访问数据库。
您将使用指向结构的指针sql.DB,它表示对特定数据库的访问。
编写代码
1、进入 main.go,在import您刚刚添加的代码下方,粘贴以下 Go 代码以创建数据库句柄。
在此代码中:
(3)使用 MySQL 驱动程序Config和FormatDSN类型以收集连接属性并将它们格式化为连接字符串的 DSN。
该Config结构使代码比连接字符串更容易阅读。
(4)调用sql.Open 初始化db变量,传递 FormatDSN。
(5)检查来自 的错误sql.Open。例如,如果您的数据库连接细节格式不正确,它可能会失败。
为了简化代码,您调用log.Fatal结束执行并将错误打印到控制台。在生产代码中,您会希望以更优雅的方式处理错误。
(6)调用DB.Ping以确认连接到数据库有效。在运行时, sql.Open可能不会立即连接,具体取决于驱动程序。您在Ping此处使用以确认 database/sql包可以在需要时连接。
(7)检查来自Ping的错误,以防连接失败。
(8)Ping如果连接成功,则打印一条消息。
文件的顶部现在应该如下所示:
3、保存 main.go。
1、开始跟踪 MySQL 驱动程序模块作为依赖项。
使用go get 添加 github.com/go-sql-driver/mysql 模块作为您自己模块的依赖项。使用点参数表示“获取当前目录中代码的依赖项”。
2、在命令提示符下,设置Go 程序使用的DBUSER和DBPASS环境变量。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目录中的命令行中,通过键入go run来运行代码。
连接成功了!
接下来,您将查询一些数据。
创建 PayPal 的目的是使金融服务民主化,并使个人和企业能够加入并在全球经济中蓬勃发展。这项工作的核心是 PayPal 的支付平台,该平台使用专有技术和第三方技术的组合来高效、安全地促进全球数百万商家和消费者之间的交易。随着支付平台变得越来越大、越来越复杂,PayPal 寻求对其系统进行现代化改造并缩短新应用程序的上市时间。
Go 在生成干净、高效的代码方面的有着极高的价值。这些代码可以随着软件部署的扩展而轻松扩展,这使得该语言非常适合支持 PayPal 的目标。
支付处理平台的核心是 PayPal 用 C++ 开发的专有 NoSQL 数据库。然而,代码的复杂性大大降低了开发人员发展平台的能力。Go 的简单代码布局、goroutine(轻量级执行线程)和通道(用作连接并发 goroutine 的管道)使 Go 成为 NoSQL 开发团队简化和现代化平台的自然选择。
作为概念验证,一个开发团队花了六个月的时间学习 Go 并在 Go 中从头开始重新实现 NoSQL 系统,在此期间,他们还提供了有关如何在 PayPal 更广泛地实施 Go 的见解。截至今天,已迁移 30% 的集群以使用新的 NoSQL 数据库。
随着 PayPal 的平台变得越来越复杂,Go 提供了一种轻松简化大规模创建和运行软件的复杂性的方法。该语言为 PayPal 提供了出色的库和快速工具,以及并发、垃圾收集和类型安全。
借助 Go,PayPal 使其开发人员能够将更多时间从 C++ 和 Java 开发的噪音中解放出来,从而能够花更多时间查看代码和进行战略性思考。
在这个新改写的 NoSQL 系统取得成功后,PayPal 内更多的平台和内容团队开始采用 Go。Natarajan 目前的团队负责 PayPal 的构建、测试和发布管道——所有这些都是在 Go 中构建的。该公司拥有一个大型构建和测试农场,它使用 Go 基础设施进行完全管理,以支持整个公司的开发人员的构建即服务(和测试即服务)。
凭借 PayPal 所需的分布式计算能力,Go 是刷新系统的正确语言。PayPal 需要并发和并行的编程,为高性能和高度可移植性而编译,并为开发人员带来模块化、可组合的开源架构的好处——Go 已经提供了所有这些以及更多帮助 PayPal 对其系统进行现代化改造。
安全性和可支持性是 PayPal 的关键问题,该公司的运营管道越来越多地由 Go 主导,因为该语言的简洁性和模块化帮助他们实现了这些目标。PayPal 对 Go 的部署为开发人员提供了一个创意平台,使他们能够为 PayPal 的全球市场大规模生产简单、高效和可靠的软件。
随着 PayPal 继续使用 Go 对其软件定义网络 (SDN) 基础设施进行现代化改造,除了更易于维护的代码外,他们还看到了性能优势。例如,Go 现在为路由器、负载平衡和越来越多的生产系统提供动力。
作为一家全球性企业,PayPal 需要其开发团队有效管理两种规模:生产规模,尤其是与许多其他服务器(如云服务)交互的并发系统;和开发规模,尤其是由许多程序员协同开发的大型代码库(如开源开发)
PayPal 利用 Go 来解决这些规模问题。该公司的开发人员受益于 Go 将解释型动态类型语言的编程易用性与静态类型编译语言的效率和安全性相结合的能力。随着 PayPal 对其系统进行现代化改造,对网络和多核计算的支持至关重要。Go 不仅提供了这种支持,而且提供的速度很快——在单台计算机上编译一个大型可执行文件最多需要几秒钟。
PayPal 目前有 100 多名 Go 开发人员,未来选择采用 Go 的开发人员将更容易获得该语言的批准,这要归功于公司已经在生产中的许多成功实现。
最重要的是,PayPal 开发人员使用 Go 提高了他们的生产力。Go 的并发机制使得编写充分利用 PayPal 的多核和联网机器的程序变得很容易。使用 Go 的开发人员还受益于它可以快速编译为机器代码的事实,并且他们的应用程序获得了垃圾收集的便利和运行时反射的强大功能。
今天 PayPal 的第一类语言是 Java 和 Node,Go 主要用作基础设施语言。虽然 Go 可能永远不会在某些应用程序中取代 Node.js,但 Natarajan 正在推动让 Go 成为 PayPal 的第一类语言。
通过他的努力,PayPal 还在评估迁移到 Google Kubernetes Engine (GKE) 以加快其新产品的上市时间。GKE 是一个用于部署容器化应用程序的托管、生产就绪环境,并带来了 Google 在开发人员生产力、自动化操作和开源灵活性方面的最新创新。
对于 PayPal 而言,部署到 GKE 将使 PayPal 更容易部署、更新和管理其应用程序和服务,从而实现快速开发和迭代。此外,PayPal 会发现更容易运行机器学习、通用 GPU、高性能计算和其他受益于 GKE 支持的专用硬件加速器的工作负载。
对 PayPal 来说最重要的是,Go 开发和 GKE 的结合使公司能够轻松扩展以满足需求,因为 Kubernetes 自动扩展将使 PayPal 能够处理用户对服务不断增长的需求——在最重要的时候保持它们可用,然后在安静的时间来省钱。
怎么学python
俗话说得好,“摩天大楼从地起”,学习任何编程语言都一定要把该语言的基础打牢,而怎么打地基呢?秘诀只有一条:多敲代码多敲代码多敲代码。学习前期建议找一本讲python基础的书或博客,把里面的例题跟着操作一遍,在基础打扎实后,可上一些比较出名的竞赛项目的网站如kaggle等,通过做项目去巩固知识。
推荐书籍:《Python基础教程(第3版)》Magnus Lie Hetland著
推荐理由:全面介绍了Python的基础知识、基本概念,高级主题,还有Python程序测试、打包、发布等知识,及10个具有实际意义的Python项目的开发过程,涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。
基础知识
代码规范
1. 缩进
相比于其他语言用大括号和end来标识代码块,python语言比较“独特”,其通过代码的缩进来标识所属代码块,通常4个空格为一个缩进,可用tab键实现。缩进是python代码的重要组成部分,若你的代码缩进格式不正确,如同一段代码块语句缩进不一致,首句未顶格等,都会运行出错。
#一个完整的语句首句要顶格
i=0
#同一代码块的语句应缩进一致
for i in range(5):
print(i)
i+=1
2. 注释
编程语言的注释,即对代码的解释和说明。给代码加上注释,可提高代码的可读性,当你阅读一段他人写的代码时,通过注释迅速掌握代码的大致意思,读起代码将更加得心应手。
python语言的注释分为单行注释和多行注释,在注释符后的内容计算机会自动跳过不去执行。
单行注释:在需注释语句前加“#”,可在代码后使用,也可另起一行使用
i=1 #在代码后使用注释
#另起一行使用注释
多行注释:在语句开头和结尾处加三个单引号或三个双引号(前后须一致)
'''
使用单引号的多行注释
'''
"""
使用双引号的多行注释
"""
使用注释除了起到望文生义,迅速了解代码意思的作用外,还有一个小妙处,可以将某段未完成或需要修改的代码隐蔽起来,暂时不让计算机执行。
3. 多行语句
python中默认以行结束作为代码结束的标记,而有时候为了阅读方便,我们需要将一个完整代码跨行表示,这时候我们可以使用续行符:反斜杠“\”来将一行语句分为多行显示:
score = eng_score + \
math_score + \
his_score
注意:若语句中使用大括号{}、中括号[]或小括号()将数据括起来,则不需要使用续行符,如下所示:
name=['Ada','Ailsa','Amy',
'Barbara','Betty','Blanche'
'Carina','Carrie','Carry'
'Daisy','Darcy','Diana']
什么是算法
在学习使用python之前,要先明确使用python的目的是什么?作为一名数据分析工作者,我们并不需要使用python语言来设计程序,只需要使用python来完成算法的实现。那么算法又是什么呢?
算法是指解决某项问题的流程或步骤,我们可以用一个很贴近生活的例子去理解,假如你需要做一道“西红柿炒鸡蛋”,根据菜谱:先准备食材,然后下油热锅,将西红柿倒进去翻炒后,加入蛋液翻炒至熟。
这就是我们完成“西红柿炒鸡蛋”这道菜所用的“算法”,而完成这个算法所需要的就是原料和操作说明,下面来看看原料和说明是什么。
变量
Python语言中的“原料”即对象,在python里万物皆对象,而对象通过引用变量唯一存在,引用上面的例子,可以将”鸡蛋”理解为”对象”,而给它取的名字”小红家鸡生的蛋”则是”变量”。
变量的概念想必大家不会陌生,和中学方程中学的变量基本上是一致的.变量可以理解为对事物的一个代号或者贴的一个标签,是一个可重复使用的量;而不同于方程中的变量,编程语言中的变量不仅仅是数值型, 还可以是字符型、逻辑型等其他数据类型。
1. 变量的性质
先定义后使用在python中引用变量需要先定义,否则会报错,但与其他编程语言如C语言不同,python定义变量不需要事先定义变量类型,变量类型随变量所赋值的类型决定可重复赋值及运算在python中变量可以重复赋值使用,变量间也可相互赋值,同时可以对变量进行运算操作#变量可重复赋值
i=2
i=3
#可对变量做运算
i+1
#查看变量的数据类型
type(a)
2. 变量的命名规则
只能包含:数字、字母、下划线不能以数字开头,不能包含python保留字、关键字、函数名慎用小写字母l和大写字母O, 避免与数字1和0混淆建议用驼峰命名法,即以单词加“"命名,如:studentname#查看python有哪些保留字
import keyword
print(keyword.kwlist)
3. 变量的赋值
基本赋值在python中,我们使用“=”对变量进行赋值,如“x=3"。这里要注意,数据和变量是分开存储的,即在内存中先建立数据“3”,然后建立一个标记“x”,再将x指向内存中的值。若重新对变量x赋值为“2”,实质上是修改了数据的引用,变量x重新指向内存中的数据“2”。
多重赋值对同一对象可以引用多个变量,例如一个人可以有多重身份,Mr Li 是一位父亲,同时也是一位教师,不同的变量,实质指向的对象是同一事物。father = teacher = 'Mr Li'
多元赋值对多个变量同时赋值,等号两边可加括号可不加a,b,c=1,2,3
(a,b,c)=(1,2,3)
语句
了解完算法中的“原料”,我们再来看看算法中的“操作说明”是什么呢?算法中的“操作说明”可以说是算法的“灵魂”,就好像一道菜完成的作品如何,很大程度取决于厨师的厨艺(即做菜秘籍)。构成算法“操作步骤”的是语句,其中包含python的基本语句和控制流程语句。控制流程语句的语法相对较复杂,在后面的文章再继续介绍,我们先认识一下python的基本语句:
其实前面我们已经接触过python的基础语句:赋值语句,赋值语句较简单不展开介绍,下面主要介绍python另一个使用特别广泛的基础语句:输出与输入语句。
1. 输出语句
python中输出值的方式主要有两种:表达式和print( )函数,两者的区别在于,表达式输出的结果为一个python对象,而在实际运用中,为方便阅读,通常需要按照一定格式输出结果,print( )函数就很好地解决此问题。
print( )语法:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
print( )参数:
objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。sep -- 用来间隔多个对象,默认值是一个空格。end -- 用来设定以什么结尾。默认值是换行符 “\n”,可换成其他字符串。file -- 要写入的文件对象。flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。#打印多个值,设置中间分隔符为“-”
print("广州","上海","深圳",sep="-")
#先以默认结尾符"\n"输出,再以结尾符设置为“-”,注意区别二者区别
print("广州")
print("上海")
print("深圳")
print("广州",end="-")
print("上海",end="-")
print("深圳",end="-")
以上代码实行结果为:
2. 输入语句
在python中获取键盘输入数据的函数是input()函数,input函数会自动将输入的数据转为字符串类型,并自动忽略换行符,同时可给出提示字符串。如果需要得到其他类型的数据,可对其进行强制性类型转换。
input( )语法:
input([prompt])
input( )参数:
prompt: 给输入者的提示信息,可选参数age=input("请输入您的年龄:")