如何用Python或IronPython最简单地访问MSSQL?

23

我在个人电脑上运行着mssql 2005数据库,希望能在其中运行一些Python脚本,并对其中的数据进行简单处理。我想运行一些select语句来获取数据,并可能让Python将结果保存为文本文件。

不幸的是,虽然我对Python和数据库都有一些了解,但很难仅凭阅读就确定一个库是否符合我的要求。理想情况下,我希望找到一个可以用于其他版本的mssql,免费且可商业使用的授权,使用简单,并且可能与IronPython兼容的库。

8个回答

26

其他人似乎已经覆盖了cPython -> SQL Server方面的内容。如果想使用IronPython,可以使用标准的ADO.NET API与数据库通信:

import clr
clr.AddReference('System.Data')
from System.Data.SqlClient import SqlConnection, SqlParameter

conn_string = 'data source=<machine>; initial catalog=<database>; trusted_connection=True'
connection = SqlConnection(conn_string)
connection.Open()
command = connection.CreateCommand()
command.CommandText = 'select id, name from people where group_id = @group_id'
command.Parameters.Add(SqlParameter('group_id', 23))

reader = command.ExecuteReader()
while reader.Read():
    print reader['id'], reader['name']

connection.Close()

如果你已经安装了IronPython,那么你不需要再安装其他任何东西。

这里有很多文档,在这里在这里


那个例子看起来有点臃肿。 - graffic
2
不幸的是,与相应的Python DBAPI代码相比,ADO.NET要更冗长一些(这也适用于.NET类库)。但它并不太糟糕,足够容易封装在一个DBAPI模块中。我已经为使用SQLAlchemy而这样做了。 - babbageclunk
非常好的观点,但不要忘记SMO是另一个选择。 - TimothyAWiseman
似乎可以使用IronPython使SQLAlchemy工作。http://stackoverflow.com/questions/2998558/using-sql-alchemy-and-pyodbc-with-ironpython-2-6-1 - dtanders

19
我使用SQL Alchemy与cPython(不确定是否适用于IronPython)。如果您使用过Hibernate/nHibernate,那么它会非常熟悉。如果这对您来说有点冗长,您可以使用Elixir,它是在SQL Alchemy之上的一个薄层。要使用其中任何一个,您都需要pyodbc,但这是一个相当简单的安装。
当然,如果您想编写直接的SQL而不使用ORM,则只需要pyodbc。

12

pyodbc内置于Activestate Python中,可以从这里下载。连接到SQL Server 2005数据库的最简ODBC脚本如下:

import odbc

CONNECTION_STRING="""
Driver={SQL Native Client};
Server=[Insert Server Name Here];
Database=[Insert DB Here];
Trusted_Connection=yes;
"""

db = odbc.odbc(CONNECTION_STRING)
c = db.cursor()
c.execute ('select foo from bar')
rs = c.fetchall()
for r in rs:
    print r[0]

我是Pyodbc的忠实粉丝。它非常简单易用,可以轻松连接SQL Server和许多其他数据源。 - TimothyAWiseman

4

我也成功地使用了 pymssql 与 CPython(包括使用 SQLAlchemy 和不使用 SQLAlchemy)。


1
记录一下,我相信SQLAlchemy中的pymssql支持已经被弃用了。推荐使用的驱动程序是pyodbc(这并不意味着pymssql不能独立工作)。 - Jason Baker

3

2

PyPyODBC (http://code.google.com/p/pypyodbc)可以在PyPy、Ironpython和CPython下使用。

这篇文章展示了如何在Python中访问mssql的Hello World样例。

PyPyODBC与pyodbc的使用方法几乎相同,因为它可以被看作是pyodbc模块的重新实现。由于它是纯Python编写的,所以也可以在IronPython和PyPy上运行。

实际上,在现有脚本中切换到pypyodbc后,您可以这样做:

#import pyodbc               <-- Comment out the original pyodbc importing line

import pypyodbc as pyodbc    # Let pypyodbc "pretend" the pyodbc

pyodbc.connect(...)          # pypyodbc has 99% same APIs as pyodbc

...

1

我曾经使用过标准的Python并喜欢上了 pymssql。 如果你只是想要基本的数据库访问,那么它可能比其他提到的选项更容易。

示例 代码


0
如果你想要一种快速而简单的方法,可以使用CPython(也适用于3.X版本的Python):
在安装Python之后,安装PYWIN32 http://sourceforge.net/projects/pywin32/files/pywin32/ 导入以下库: import odbc
我创建了以下方法来获取SQL Server ODBC驱动程序(根据你的Windows版本的命名略有不同,因此这种方法可以适用于任何版本):
def getSQLServerDriver():
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\ODBC\ODBCINST.INI")
    sqlServerRegExp =  re.compile('sql.*server', re.I | re.S)

    try:
        for i in range(0, 2048):
            folder = winreg.EnumKey(key, i)
            if sqlServerRegExp.match(folder):
                return folder.strip()
    except WindowsError:
        pass

注意:如果您使用上述函数,您还需要导入这两个库:winreg和re 然后您可以使用ODBC API 1信息,如此处定义:http://www.python.org/dev/peps/pep-0248/ 您的连接接口字符串应该类似于这样(假设您正在使用我上面提到的方法来获取ODBC驱动程序名称,并且它是受信任的连接):
dbString = "Driver={SQLDriver};Server=[SQL Server];Database=[Database Name];Trusted_Connection=yes;".replace('{SQLDriver}', '{' + getSQLServerDriver() + '}')

这种方法有很多缺点。它不太灵活,因为只支持ODBC API 1,而且我在API或ODBC驱动中遇到了一些小错误,但在Windows的所有版本的CPython中确实可以完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接