如何通过SQL和Python的集成来快速建立工作流程

网友投稿 506 2023-12-01

如何通过SQL和Python的集成来快速建立工作流程

本篇内容主要讲解“如何通过SQL和Python的集成来快速建立工作流程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何通过SQL和Python的集成来快速建立工作流程”吧!

如何通过SQL和Python的集成来快速建立工作流程

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

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

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

pyodbc

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

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

IBM Db2

MySQL

Oracle

MS Access

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查询。

执行查询

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 thetable, 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        importpyodbc        from datetimeimport datetime,timedelta        import pandas aspd              # imports forsending email        from email.mime.text importMIMEText        fromemail.mime.multipart importMIMEMultipartimport smtplib              date = datetime.today() -timedelta(days=7)  # get the date 7days 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 dataframein 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()              # getmaxpayment and product details        max_vals =data[[productpayment]].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"  # setemailsubject        msg.attach(MIMEText(txt))  # add text contents              # we will sendvia outlook, first we initialise connection to mail server        smtp = smtplib.SMTP(smtp-mail.outlook.com587)        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.comPassword123)                 # send email to ourboss        smtp.sendmail(joebloggs@outlook.comjoebloggsboss@outlook.com, msg.as_string())                 # finally,disconnect from the mail server        smtp.quit()

到此,相信大家对“如何通过SQL和Python的集成来快速建立工作流程”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NoSQL数据库有哪些优点
下一篇:数据库优化的阶段是什么
相关文章

 发表评论

暂时没有评论,来抢沙发吧~