文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

优秀官配:世界上人们很喜欢的数据库+很喜欢的语言

2024-12-11 21:04

关注

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

[[330373]]

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

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

pyodbc

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

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

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

连接

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

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

 

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

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

 

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

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

执行查询

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

先来初始化游标:

 

  1. cursor = cnxn.cursor() 

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

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

 

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

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

提取数据

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

 

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

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

在SQL中变更数据

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

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

 

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

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

 

  1. cnxn.commit() 

下一步

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

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

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

 

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

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

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

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

 

来源:读芯术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯