Azure SQL数据库或管理实例是微软在管理云环境中为SQL Server提供的云服务。通常情况下,我们从SQL Server Management Studio、Azure Data Studio或应用程序连接数据库,以查询数据。
Python是一种流行的编程语言,具有网络开发、机器学习功能。它提供了一种使用语言构造的面向对象的方法。你可以用它来编写较少的代码行,使用自定义模块和库来执行各种任务。因此,你可能会得到一个使用Python连接Azure SQL数据库的要求。
本文探讨了如何在Ubuntu操作系统中使用Python连接Azure SQL DB。
要求
在我们开始之前,让我们快速检查一下本文的前提条件。
Visual Studio Code IDE最新版本
- 在Ubuntu中导航到code.visualstudio.com/,下载Debian版本并安装它。
用于SQL Server的微软ODBC驱动程序
你需要一个用于Linux上SQL Server的微软ODBC驱动程序。 对于这篇文章,我们使用最新的ODBC 17,使用以下步骤。
用Sudo账户连接,使用CURL工具从微软软件包商店添加软件包密钥。
sudo su
curl packages.microsoft.com/keys/micros… | apt-key add -
在Ubuntu 20.04上,使用以下脚本下载适当的软件包。
curl packages.microsoft.com/config/ubun… > /etc/apt/sources.list.d/mssql-release.list
使用apt-get命令来更新仓库。
$ sudo apt-get update
现在,用以下命令安装微软ODBC驱动17。
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
它下载并安装了ODBC 17。如果你已经在你的环境中下载了它,你会得到以下信息。
活动的Azure订阅
我们需要一个活跃的Azure订阅,并配置了Azure SQL数据库与样本数据库来查询它。你还需要一个用于从Python连接Azure的登录凭证。
注意:在这篇文章中,我们将不涉及创建Azure SQL DB。如果你不知道,可以参考SQLShack上的Azure文章( https://www.sqlshack.com/category/azure/)
对于这篇文章,我们需要你从Azure门户(如下图所示)或Azure CLI获得的Azure逻辑服务器名称。
下载Python安装程序
本文使用Python连接到SQL Server。因此,我们需要在Ubuntu中安装和配置Python 3。
首先,使用命令--Python----版本来验证Python是否已经安装。
我们没有;因此,它说,没有找到'Python'命令。
下面的命令下载并安装了Python 3.9版本。你可以从www.python.org/,检查最新的Python版本
sudo apt install python3.9
一旦Python安装完毕,验证构建版本,如下所示。
使用pip--Python软件包管理安装pyodbc
在Ubuntu中启动VS Code IDE,导航到终端->新终端。它启动了bash终端,如下图所示。
为了安装 pyodbc,我们需要在 Linux 中使用 pip 工具。如果你在Ubuntu上已经有了它,请忽略这个。
sudo apt install pip
输入Y以继续安装pip工具。
现在,用下面的脚本在Ubuntu中安装pyodbc。
pip 安装 pyodbc
在Visual Studio Code中安装Python扩展
VS code IDE为Python语言提供了一个扩展,以提供语法高亮、颜色编码和内联建议。进入VS code的扩展(从左边的菜单),安装下面的Python语言扩展。
在VS code中安装Python扩展后,会打开一个页面--开始使用Python开发。
第1步:安装Python - 它已经完成了;因此,它为这个步骤显示了一个勾。
第2步:选择一个Python解释器。我们在前面的步骤中安装了Python 3.9.5。因此,点击选项--选择一个Python解释器,从下面的下拉菜单中选择正确的Python版本。
它还显示了推荐的Python解释器,如下图所示。
用于查询Azure SQL数据库的Python脚本
启动VS代码编辑器,打开一个新文件->,你会得到一个信息,选择IDE语言。
点击超链接-选择语言,选择Python语言,如下图所示。
在编辑器中,粘贴以下连接到Azure SQL数据库的Python脚本。将该脚本保存为testcript.py
import pyodbc
server = 'azuredemosqldemo.database.windows.net'
database = 'azuredemodatabase'
username = 'sqladmin'
password = '********'
driver= '{ODBC Driver 17 for SQL Server}'
with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT TOP 3 ProductID, Name, ProductNumber FROM [SalesLT].[Product]")
row = cursor.fetchone()
while row:
print (str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
使用命令执行testcript.py -python3 testscript.py
为了演示的目的,我指定了前3个子句,在输出中只返回三条记录。
让我们逐行了解这个脚本。
- 第1行在当前Python脚本会话中导入pyodbc模块。这一步将确保你在执行Python ODBC脚本时没有任何依赖性问题。
- 第2行定义了一个变量来存储Azure SQL服务器的名称。
- 第3行存储Azure SQL数据库的名称。
- 第4行和第5行存储与Azure DB连接的凭证。这些凭证应该有成功完成指定任务的权限。
- 第6行定义了SQL服务器驱动为SQL服务器的ODBC驱动。
- 第8行使用pyodbc.connect()方法,使用所有参数定义的值连接到Azure DB。
- 第10行定义了我们要在连接字符串中定义的连接上执行的T-SQL脚本。你可以在这个Python脚本中添加t-SQL语句、存储过程、函数、视图。
- 剩下的代码执行该脚本,并在控制台打印每一行的值。cursor.fetchone()返回一条记录,如果没有更多的记录,则返回没有任何记录的记录。
使用Pandas数据框架来查询Azure SQL数据库中的SQL表
Pandas数据框架可以将CSV文件导入Python,创建一个数据框架和查询,并将数据导入表。潘达斯模块的好处是,它在Python中提供了与SQL类似的数据结构。因此,你可以使用它有效地与SQL工作。
要使用pandas模块,首先要用命令安装 -pip install pandas
它有以下三个函数用于从SQL读取数据。
- pandas.read_sql_table() :使用表作为参数
- pandas.read_sql_query()。使用SQL查询作为参数
- pandas.read_sql()。它可以把表或查询作为参数。
下面的Python脚本使用pandas数据框架和read_sql_query()模块来执行Azure SQL数据库中的SQL脚本。对于连接字符串,我们在pd.read_sql_query()中指定了连接字符串变量conn。你可以指定查询,它返回数据框架的结果,如下图所示。
import pyodbc
import pandas as pd
server = 'azuredemosqldemo.database.windows.net'
database = 'azuredemodatabase'
username = 'sqladmin'
password = '********'
driver= '{ODBC Driver 17 for SQL Server}'
with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
df=pd.read_sql_query('Select Top 5 ProductID, Name, ProductNumber from SalesLT.Product order by productid', conn)
print(df)
使用Python脚本从CSV文件导入数据
你可能经常使用CSV文件将数据导入SQL表。有多种方法可以将数据导入到SQL Server表中,比如SSIS包,导入和导出数据向导。你也可以使用pandas数据框架来读取和导入数据。
例如,假设我有一个样本CSV文件,其中有以下数据。
我们可以使用pandas数据框架模块read_csv()来读取CSV数据并在屏幕上显示。 在列的部分,我们指定了数据导入的列名。
import pandas as pd
data = pd.read_csv (r'sampledata.csv')
df = pd.DataFrame(data, columns= ['Country','ID','EmpName'])
print(df)
现在,我们需要将这些CSV数据导入到SQL表[TestTablePy]中。为了执行插入语句,我们使用cursor.execute()函数并使用通配符来指定CSV文件中每一列的值。
import pyodbc
import pandas as pd
data = pd.read_csv (r'sampledata.csv')
df = pd.DataFrame(data, columns= ['Country','ID','EmpName'])
server = 'azuredemosqldemo.database.windows.net'
database = 'azuredemodatabase'
username = 'sqladmin'
password = '********’
driver= '{ODBC Driver 17 for SQL Server}'
with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
cursor= conn.cursor()
# Create Table
# Insert DataFrame to Table
for row in df.itertuples():
cursor.execute('''
INSERT INTO TestTablePy (Country, ID, EmpName)
VALUES (?,?,?)
''',
row.Country,
row.ID,
row.EmpName
)
conn.commit()
Python脚本成功执行,你可以验证表中的数据。
数据与CSV数据相符,如下图所示。
总结
本文使用Pyodbc和pandas数据框架,用Python脚本来访问Azure SQL数据库表。此外,文章从CSV中读取数据并将其导入到SQL表中。Python脚本有助于使用各种pandas模块进行数据探索和分析。因此,Azure数据库的Python脚本的组合是很有价值的,我建议你去探索它。