网易首页 > 网易号 > 正文 申请入驻

最强官配:世界上人们最喜欢的数据库+最喜欢的语言

0
分享至

全文共2157字,预计学习时长13分钟

几乎每个人都在使用SQL和Python,Python是用于数据分析、机器学习和网页开发的全明星顶级语言,而SQL是数据库的实际标准。如果将两者结合会发生什么呢?

实际上,两者要结合在一起并不难。我们可以快速利用Python的动态特性,控制和构建SQL查询。设置完成后,我们无需执行任何操作。

这两种工具结合之后可谓是最强搭档,自动化和效率都达到了新高度。

pyodbc

连接两种技术的桥梁是pyodbc,该库可以轻松访问ODBC数据库。

ODBC(开放数据库连接的简称)是一种用于访问数据库的标准化应用程序编程接口(API),由90年代初的SQLAccess组开发。兼容的数据库管理系统(DBMS)包括:

· IBM Db2

· MySQL

· Oracle

· MS Access

· MS SQL服务器

本文将使用MS SQL服务器。在多数情况下,该服务器可以直接转移,与任何符合ODBC的数据库都可一起使用。唯一需要更改的是连接设置。

连接

首先,要创建与SQL 服务器的连接,可以通过pyodbc.connect实现。在此函数中,还须传递连接字符串。此连接字符串必须指定DBMS驱动程序、服务器、要连接的特定数据库以及连接设置。

因此,假设要连接到服务器UKXXX00123,45600和数据库DB01,需要使用SQL Server Native Client 11.0。从内部连接使得连接被信任,无需输入用户名和密码。

cnxn_str = ("Driver={SQLServer Native Client 11.0};"
"Server=UKXXX00123,45600;"
"Database=DB01;"
"Trusted_Connection=yes;")
现在,连接已初始化为:
cnxn = pyodbc.connect(cnxn_str)

如果不通过受信任的连接访问数据库,则需要输入通常用于通过SQLServer Management Studio(SSMS)访问服务器的用户名和密码。例如,如果用户名是JoeBloggs,而密码是Password123,则应立即更改密码。更改密码之前,可以按照如下进行连接:

cnxn_str = ("Driver={SQLServer Native Client 11.0};"
"Server=UKXXX00123,45600;"
"Database=DB01;"
"UID=JoeBloggs;"
"PWD=Password123;")cnxn = pyodbc.connect(cnxn_str)

现在我们已连接到数据库,可以开始通过Python执行SQL查询。

图源:pexels

执行查询

SQL 服务器上运行的每个查询都包含游标初始化和查询执行。如果要在服务器内部进行任何更改,还需要将这些更改提交到服务器。

先来初始化游标:

cursor = cnxn.cursor()

现在,每当要执行查询时,都要使用此游标对象。

从名为“customers”表中选择前1000行:

cursor.execute("SELECTTOP(1000) * FROM customers")

执行该操作,但这发生在服务器内部,实际上什么也没有返回到Python。让我们一起看看从SQL中提取的这些数据。

提取数据

要从SQL中提取数据到Python中,需要使用pandas。Pandas提供了一个非常方便的函数read_sql,该函数可以从SQL读取数据。read_sql需要查询和连接实例cnxn,如下所示:

data =pd.read_sql("SELECT TOP(1000) * FROM customers", cnxn)

这会返回到包含“customers”表中前1000行的数据框。

在SQL中变更数据

现在,如果要变更SQL中的数据,需要在原始的初始化连接后添加另一步,执行查询过程。在SQL中执行查询时,这些变更将保存在临时存在的空格中,而不是直接对数据进行更改。

为了让变更永久生效,必须提交变更。连接firstName和lastName列,创建fullName列。

cursor = cnxn.cursor()# firstalter the table, adding a column
cursor.execute("ALTER TABLE customer " +
"ADD fullNameVARCHAR(20)")# now update that column to contain firstName
+ lastNamecursor.execute("UPDATEcustomer " +
"SET fullName = firstName + " " + lastName")

此时,fullName并不存在于数据库中。必须提交这些变更,让变更永久生效:

cnxn.commit()

下一步

一旦执行了需要执行的任何操作任务,就可以把数据提取到Python中,也可以将数据提取到Python中,在Python中进行操作。

无论采用哪种方法,一旦Python中有了数据,就可以做很多以前无法做到的事情。

也许需要执行一些日常报告,通常使用这些报告查询SQL 服务器中的最新数据,计算基本统计信息,然后通过电子邮件发送结果。如何自动化这一过程呢?

# imports for SQL data part
import pyodbc
from datetime import datetime,timedelta
import pandas as pd
# imports forsending email
from email.mime.text importMIMEText
fromemail.mime.multipart importMIMEMultipart
import smtplib
date = datetime.today() -timedelta(days=7) # get the date 7 days ago
date = date.strftime("%Y-%m-%d") # convert to format yyyy-mm-dd
cnxn = pyodbc.connect(cnxn_str) # initialise connection (assume we havealready defined cnxn_str)
# build up ourquery string
query = ("SELECT *FROM customers "
f"WHERE joinDate > '{date}'")
# execute thequery and read to a dataframe in Python
data = pd.read_sql(query, cnxn)
del cnxn # close the connection
# make a fewcalculations
mean_payment = data['payment'].mean()
std_payment = data['payment'].std()
# get maxpayment and product details
max_vals = data[['product', 'payment']].sort_values(by=['payment'], ascending=False).iloc[0]
# write an emailmessage
txt = (f"Customerreporting for period {date} - {datetime.today().strftime('%Y-%m-%d')}.\n\n"
f"Mean payment amounts received: {mean_payment}\n"
f"Standard deviation of payment amounts: {std_payments}\n"
f"Highest payment amount of {max_vals['payment']} "
f"received from {max_vals['product']} product.")
# we will built themessage using the email library and send using smtplib
msg =MIMEMultipart()
msg['Subject'] ="Automatedcustomer report" # set emailsubject
msg.attach(MIMEText(txt)) # add text contents
# we will sendvia outlook, first we initialise connection to mail server
smtp = smtplib.SMTP('smtp-mail.outlook.com', '587')
smtp.ehlo() # say hello to the server
smtp.starttls() # we will communicate using TLSencryption
# login to outlookserver, using generic email and password
smtp.login('joebloggs@outlook.com', 'Password123')
# send email to ourboss
smtp.sendmail('joebloggs@outlook.com', 'joebloggsboss@outlook.com', msg.as_string())
# finally,disconnect from the mail server
smtp.quit()

至此,任务结束!运行此代码快速提取前一周的数据,计算关键指标,并把摘要发送给老板。

图源:pexels

通过简单的步骤,我们了解了如何通过使用SQL和Python的集成来快速建立更高效、自动化的工作流程。不仅仅可以用来做本例中的事,它还有很多用途等你开发。

Python开辟了新路线,完成了以前仅使用SQL无法完成的操作。这对最强官配,实现了1+1大于2的效果。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
布林肯突然乘火车抵达基辅,美官员:“发出一个强烈的安抚信号”

布林肯突然乘火车抵达基辅,美官员:“发出一个强烈的安抚信号”

环球网资讯
2024-05-14 15:33:29
OpenAI一夜改写历史,GPT-4o干翻所有语音助手!丝滑如真人引爆全网科幻成真

OpenAI一夜改写历史,GPT-4o干翻所有语音助手!丝滑如真人引爆全网科幻成真

新智元
2024-05-14 05:35:31
湖北:女子得知男友花22万娶别人,情绪失控痛哭,我要16万都嫌多

湖北:女子得知男友花22万娶别人,情绪失控痛哭,我要16万都嫌多

夫妻谈资局
2024-05-14 20:47:40
OpenAI颠覆世界:GPT-4o完全免费,实时语音视频交互震撼全场

OpenAI颠覆世界:GPT-4o完全免费,实时语音视频交互震撼全场

机器之心Pro
2024-05-14 08:28:15
男子存款几百万依旧迷茫:每月利息满足不了花销,看不到希望生活很压抑

男子存款几百万依旧迷茫:每月利息满足不了花销,看不到希望生活很压抑

老郭在学习
2024-05-14 23:58:47
国家疾控局称我国本土已监测到KP.2新冠变异株,此前已在美国蔓延

国家疾控局称我国本土已监测到KP.2新冠变异株,此前已在美国蔓延

第一财经资讯
2024-05-14 12:58:51
多点开花,阿图尔是紫百合本赛季第18位进球球员,队史第二

多点开花,阿图尔是紫百合本赛季第18位进球球员,队史第二

懂球帝
2024-05-14 05:04:00
效力3个赛季!曼联官方:31岁瓦拉内今夏以自由球员身份离队

效力3个赛季!曼联官方:31岁瓦拉内今夏以自由球员身份离队

直播吧
2024-05-14 18:16:44
王涛:目前没有来华商业赛通过审批,C罗今夏能回来比登天还难

王涛:目前没有来华商业赛通过审批,C罗今夏能回来比登天还难

直播吧
2024-05-14 22:41:17
《歌手》引爆全网请战!目前自荐歌手将近20人,张杰发文反向嘲讽

《歌手》引爆全网请战!目前自荐歌手将近20人,张杰发文反向嘲讽

萌神木木
2024-05-13 16:18:00
青岛嘴贱劝人分手女主持人被网暴!当事人大量生活照曝光!

青岛嘴贱劝人分手女主持人被网暴!当事人大量生活照曝光!

远荐
2024-05-14 11:14:47
4棵金茶花价值上亿,在银行离奇失踪!女企业家追讨十多年无果,云南多方回应

4棵金茶花价值上亿,在银行离奇失踪!女企业家追讨十多年无果,云南多方回应

环球网资讯
2024-05-09 14:11:14
湖北一警车高速上截停小车,男子亮证后质问“为什么不避让”,当地:正核实

湖北一警车高速上截停小车,男子亮证后质问“为什么不避让”,当地:正核实

潇湘晨报
2024-05-14 12:12:35
中方:将采取坚决措施!

中方:将采取坚决措施!

新京报
2024-05-14 19:36:23
婚后4年,潘玮柏胖到200斤:差点认不出......

婚后4年,潘玮柏胖到200斤:差点认不出......

GirlDaily
2024-05-13 16:13:36
网传疑“爱国者”导弹车惊现国内,由天津牌照半挂运载,成色很新

网传疑“爱国者”导弹车惊现国内,由天津牌照半挂运载,成色很新

不掉线电波
2024-05-14 09:22:51
17岁女孩跟黄毛男友住脏乱差集体宿舍,网友:好白菜都让猪拱了

17岁女孩跟黄毛男友住脏乱差集体宿舍,网友:好白菜都让猪拱了

三月柳
2024-05-14 14:58:23
中国要动手了?西方卫星发现:大量新生产的歼20被部署在对台一线

中国要动手了?西方卫星发现:大量新生产的歼20被部署在对台一线

影剧真知岛
2024-05-14 09:27:25
日本第一季度超2万独居者死于家中,65岁以上老人占八成

日本第一季度超2万独居者死于家中,65岁以上老人占八成

新京报
2024-05-14 13:56:13
花310万买房如今222万卖掉,前前后后亏了170万,网友:今后再也不买房子

花310万买房如今222万卖掉,前前后后亏了170万,网友:今后再也不买房子

可达鸭面面观
2024-05-14 20:39:13
2024-05-15 03:12:49
趣味搞笑大魔王
趣味搞笑大魔王
多元化的趣味引领你的生活!
1366文章数 3539关注度
往期回顾 全部

科技要闻

阿里“爆改”一周年:变法凶猛,增长艰难

头条要闻

杭州一电商平台员工1年受贿9200万 大量金条现金被查获

头条要闻

杭州一电商平台员工1年受贿9200万 大量金条现金被查获

体育要闻

"全世界最美球场"的主人 时隔21年重回意甲

娱乐要闻

《歌手》引爆全网,众多歌手请战!

财经要闻

多位百亿富豪信息遭泄露 980元包年可查

汽车要闻

不到十万纯电SUV 比亚迪元UP主打一个卷

态度原创

家居
游戏
手机
本地
公开课

家居要闻

凝固音乐 时间不在意识轴中

《剑星》总监谈服装和谐:不是索尼干的 单纯想更时尚

手机要闻

华为星耀版新机突然来袭:麒麟芯片+全能充电器,是否值得期待?

本地新闻

云游中国|哪吒小镇,潮玩新地标!

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版