从Ubuntu使用Python连接Azure SQL数据库的方法

174 阅读7分钟

Azure SQL数据库或管理实例是微软在管理云环境中为SQL Server提供的云服务。通常情况下,我们从SQL Server Management Studio、Azure Data Studio或应用程序连接数据库,以查询数据。

Python是一种流行的编程语言,具有网络开发、机器学习功能。它提供了一种使用语言构造的面向对象的方法。你可以用它来编写较少的代码行,使用自定义模块和库来执行各种任务。因此,你可能会得到一个使用Python连接Azure SQL数据库的要求。

本文探讨了如何在Ubuntu操作系统中使用Python连接Azure SQL DB。

要求

在我们开始之前,让我们快速检查一下本文的前提条件。

Visual Studio Code IDE最新版本

VS Code

Install VS code on Ubuntu

用于SQL Server的微软ODBC驱动程序

你需要一个用于Linux上SQL Server的微软ODBC驱动程序。 对于这篇文章,我们使用最新的ODBC 17,使用以下步骤。

用Sudo账户连接,使用CURL工具从微软软件包商店添加软件包密钥。

sudo su
curl packages.microsoft.com/keys/micros… | apt-key add -

Microsoft ODBC driver for SQL Server

在Ubuntu 20.04上,使用以下脚本下载适当的软件包。

curl packages.microsoft.com/config/ubun… > /etc/apt/sources.list.d/mssql-release.list

download appropriate package

使用apt-get命令来更新仓库。

$ sudo apt-get update

apt-get command

现在,用以下命令安装微软ODBC驱动17。

sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17

它下载并安装了ODBC 17。如果你已经在你的环境中下载了它,你会得到以下信息。

Microsoft ODBC driver 17

活动的Azure订阅

我们需要一个活跃的Azure订阅,并配置了Azure SQL数据库与样本数据库来查询它。你还需要一个用于从Python连接Azure的登录凭证。

注意:在这篇文章中,我们将不涉及创建Azure SQL DB。如果你不知道,可以参考SQLShack上的Azure文章( https://www.sqlshack.com/category/azure/)

对于这篇文章,我们需要你从Azure门户(如下图所示)或Azure CLI获得的Azure逻辑服务器名称。

Active Azure Subscription

下载Python安装程序

本文使用Python连接到SQL Server。因此,我们需要在Ubuntu中安装和配置Python 3。

首先,使用命令--Python----版本来验证Python是否已经安装。

我们没有;因此,它说,没有找到'Python'命令。

Python installer

下面的命令下载并安装了Python 3.9版本。你可以从www.python.org/,检查最新的Python版本

sudo apt install python3.9

Python installer continue

Progress message

一旦Python安装完毕,验证构建版本,如下所示。

Python version

使用pip--Python软件包管理安装pyodbc

在Ubuntu中启动VS Code IDE,导航到终端->新终端。它启动了bash终端,如下图所示。

Install pyodbc

为了安装 pyodbc,我们需要在 Linux 中使用 pip 工具。如果你在Ubuntu上已经有了它,请忽略这个。

sudo apt install pip

输入Y以继续安装pip工具。

the pip utility installation

现在,用下面的脚本在Ubuntu中安装pyodbc。

pip 安装 pyodbc

pyodbc in Ubuntu

在Visual Studio Code中安装Python扩展

VS code IDE为Python语言提供了一个扩展,以提供语法高亮、颜色编码和内联建议。进入VS code的扩展(从左边的菜单),安装下面的Python语言扩展。

Python extension

在VS code中安装Python扩展后,会打开一个页面--开始使用Python开发。

第1步:安装Python - 它已经完成了;因此,它为这个步骤显示了一个勾。

第2步:选择一个Python解释器。我们在前面的步骤中安装了Python 3.9.5。因此,点击选项--选择一个Python解释器,从下面的下拉菜单中选择正确的Python版本。

Get started with python development.

它还显示了推荐的Python解释器,如下图所示。

Select interpreter

用于查询Azure SQL数据库的Python脚本

启动VS代码编辑器,打开一个新文件->,你会得到一个信息,选择IDE语言。

Python script for querying Azure SQL Database

点击超链接-选择语言,选择Python语言,如下图所示。

Select the language

在编辑器中,粘贴以下连接到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个子句,在输出中只返回三条记录。

View PY script output

让我们逐行了解这个脚本。

  • 第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

Pandas data frame

它有以下三个函数用于从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)

Use pandas to query data

使用Python脚本从CSV文件导入数据

你可能经常使用CSV文件将数据导入SQL表。有多种方法可以将数据导入到SQL Server表中,比如SSIS包,导入和导出数据向导。你也可以使用pandas数据框架来读取和导入数据。

例如,假设我有一个样本CSV文件,其中有以下数据。

Import data from CSV file using

我们可以使用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)

Read data from CSV

现在,我们需要将这些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脚本成功执行,你可以验证表中的数据。

Import data from CSV

数据与CSV数据相符,如下图所示。

View table data

总结

本文使用Pyodbc和pandas数据框架,用Python脚本来访问Azure SQL数据库表。此外,文章从CSV中读取数据并将其导入到SQL表中。Python脚本有助于使用各种pandas模块进行数据探索和分析。因此,Azure数据库的Python脚本的组合是很有价值的,我建议你去探索它。