python是数据库语言吗_世界上人们最喜欢的数据库和最喜欢的语言Python结合会发生什么?...

5ee9e264d0798551.jpg

几乎每个人都在使用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查询。执行查询

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()

至此,任务结束!运行此代码快速提取前一周的数据,计算关键指标,并把摘要发送给老板。通过简单的步骤,我们了解了如何通过使用SQL和Python的集成来快速建立更高效、自动化的工作流程。不仅仅可以用来做本例中的事,它还有很多用途等你开发。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于数据库实现增删查改的Python网上投票系统的详细代码: ```python import mysql.connector # 连接数据库 mydb = mysql.connector.connect( host="localhost", user="root", passwd="password", database="vote_system" ) # 创建游标对象 mycursor = mydb.cursor() # 定义一个函数,用于插入数据 def insert_data(title, option_a, option_b, option_c, option_d): sql = "INSERT INTO vote (title, option_a, option_b, option_c, option_d) VALUES (%s, %s, %s, %s, %s)" val = (title, option_a, option_b, option_c, option_d) mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "记录插入成功。") # 定义一个函数,用于更新数据 def update_data(id, title, option_a, option_b, option_c, option_d): sql = "UPDATE vote SET title = %s, option_a = %s, option_b = %s, option_c = %s, option_d = %s WHERE id = %s" val = (title, option_a, option_b, option_c, option_d, id) mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "记录更新成功。") # 定义一个函数,用于删除数据 def delete_data(id): sql = "DELETE FROM vote WHERE id = %s" val = (id,) mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "记录删除成功。") # 定义一个函数,用于查询数据 def select_data(): mycursor.execute("SELECT * FROM vote") myresult = mycursor.fetchall() for x in myresult: print(x) # 插入数据 insert_data("你喜欢哪种语言?", "Python", "Java", "C++", "JavaScript") # 更新数据 update_data(1, "你最喜欢哪种语言?", "Python", "Java", "C++", "JavaScript") # 删除数据 delete_data(1) # 查询数据 select_data() ``` 这个代码示例中,我们首先连接了一个名为`vote_system`的数据库,然后定义了四个函数,分别用于插入、更新、删除和查询数据。在插入、更新和删除数据的函数中,我们都使用了`execute()`方法来执行SQL语句,然后使用`mydb.commit()`方法将修改提交到数据库中。在查询数据的函数中,我们使用了`fetchall()`方法来获取所有的数据,并使用`for`循环遍历结果集并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值