Python中使用SQL语句访问SQL Server和Pandas数据

Pandas是python语言中生成、导入、操控数据的工具包,而SQL语言是操作一般数据库常用的编程语言,那么如何在python编程环境中,使用SQL编成的代码,访问或操控一般数据库系统中的数据呢?pyodbc工具包就是为这种需求服务的,可以与当前常见的d数据管理系统建立连接,可以在python中像使用SQL查询那样访问数据。

pyodbc支持的数据管理系统

  • Google BigQuery
  • Hive from Ubuntu / Debian
  • Microsoft Access
  • Microsoft Excel
  • Microsoft SQL Server from Windows
  • Microsoft SQL Server from Linux
  • Microsoft SQL Server from Red Hat or CentOS
  • Microsoft SQL Server from Red Hat 6 or CentOS-7
  • Microsoft SQL Server from Mac OSX
  • MySQL
  • Netezza
  • Oracle from Red Hat or CentOS
  • PostgreSQL
  • SQLite
  • Teradata
  • Vertica
  • 安装pyodbc工具包

    pip install pyodbc

    调用pyodbd工具包

    在与SQL server数据库建立连接之前,先导入该工具包:

    import pyodbc

    与SQL server 建立连接

    使用pyodbc.connect 函数建立与SQL Server的连接,该函数需要一个连接字符串作为参数,连接字符串的定义和声明可以分开。连接分为两种:可信任连接和不可信任连接,其中不可信任连接需要输入用户名及其密码。连接字符串的组成如以下实例:

  • 可信任连接字符串
  • connection_string = ("Driver={SQL Server Native Client 11.0};"            "Server=Your_Server_Name;"            "Database=My_Database_Name;"            "Trusted_Connection=yes;")
  • 不可信任连接字符串
  • connection_string = ("Driver={SQL Server Native Client 11.0};"            "Server=Your_Server_Name;"            "Database=My_Database_Name;"            "UID=Your_User_ID;"            "PWD=Your_Password;")

    连接字符串内容包括:Server 名称、Database名称、User ID用户名和密码。

    获取服务器名称

    连接SQL Server数据库系统的界面如下图所示:

    获得上述信息的方法有两种:一种是查看如上图这样的登录界面,另一种是使用SQL查询语句:

    SELECT @@SERVERNAME

    获取数据库名称

    在MS SQL Server Management Studio系统中,可以在object Explorer(对象浏览器)菜单中查找数据库名称,如下图所示:

    在图中的实例,数据库名称为:My_Database_Name

    获取用户名-UID

    在SQL Server 登陆界面中,可以看到用户名。

    与SQL Server建立连接

    使用pyodbc.connect函数完成连接初始化,代码如下:

    connection = pyodbc.connect(connection_string)

    在python中,连接SQL Server数据库,

    import pyodbcconnection_string = ("Driver={SQL Server Native Client 11.0};"            "Server=Your_Server_Name;"            "Database=My_Database_Name;"            "UID=Your_User_ID;"            "PWD=Your_Password;")connection = pyodbc.connect(connection_string)

    在python中运行SQL查询语句

    与SQL Sever建立连接之后,可以运行SQL查询语句,这需要定义一个游标(cursor)。例如,一个简单的查询,查看数据表State_Population的前10行数据,代码如下:

    # 游标 Cursor 初始化cursor = connection.cursor()# 执行一个 SQL 查询cursor.execute('SELECT TOP(10) * FROM State_Population')

    运行上述语句后,并不能看到结果数据,可以另外把查询结果数据打印出来,代码如下:

    for row in cursor:    print(row)

    结果如下:

    (AL,  under18,  2012,   1117489.0)(AL,    total,  2012,   4817528.0)(AL,  under18,  2010,   1130966.0)(AL,    total,  2010,   4785570.0)(AL,  under18,  2011,   1125763.0)(AL,    total,  2011,   4801627.0)(AL,    total,  2009,   4757938.0)(AL,  under18,  2009,   1134192.0)(AL,  under18,  2013,   1111481.0)(AL,    total,  2013,   4833722.0)

    在python中操作数据库中的表

    Pandas是python中的保存数据的数据结构,其dataframe和SQL数据表相似。Pandas提供了以下读取SQL 数据的函数:

  • pandas.read_sql_table() ,参数是数据表的名称
  • pandas.read_sql_query(),参数为SQL查询语句字符串
  • pandas.read_sql(),把前面两个参数打包在一起
  • 再看看查看数据表State_Population的前10行数据,实例代码如下:

    import pandas as pddata = pd.read_sql('SELECT TOP(10) * FROM State_Population', connection)data

    把State_Population数据表中前10条记录导入到data,结果如下:

    可以把查询语句作为字符串单独写,通过一个变量调用,如下:

    query = 'SELECT * FROM STATE_AREAS WHERE [area (sq. mi)] > 100000'area = pd.read_sql(query, connection)area

    结果如下图:

    pyodbc把python和SQL结合起来使用,这极大的方便了操控常见的各种规模的数据库管理系统。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年3月15日
    下一篇 2022年3月15日

    相关推荐