使用python或ironpython访问mssql的最简单方法是什么?

时间:2008-11-14 12:50:12

标签: python sql-server ironpython

我已经在我的个人计算机上运行了mssql 2005,数据库我想运行一些python脚本。我正在寻找一种方法来对数据进行一些非常简单的访问。我想运行一些select语句,处理数据,并且可能让python保存带有结果的文本文件。

不幸的是,尽管我对python有点了解并且对数据库有点了解,但是我很难通过阅读来判断,如果一个库做了我想做的事情。理想情况下,我想要的东西适用于其他版本的mssql,是免费的,许可允许商业使用,使用简单,可能与ironpython一起使用。

8 个答案:

答案 0 :(得分: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,则无需安装任何其他内容。

有很多可用的文档herehere

答案 1 :(得分:19)

我将SQL Alchemy与cPython一起使用(我不知道它是否适用于IronPython)。如果您使用过Hibernate / nHibernate,那将会非常熟悉。如果这对你来说有点过于冗长,你可以使用Elixir,它是SQL Alchemy之上的一个薄层。要使用其中任何一个,您需要pyodbc,但这是一个非常简单的安装。

当然,如果你想直接写SQL而不是使用ORM,你只需要pyodbc。

答案 2 :(得分:12)

pyodbc附带Activestate Python,可以从here下载。连接到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]

答案 3 :(得分:4)

我也成功地将pymssql与CPython一起使用。 (有和没有SQLAlchemy)。

答案 4 :(得分:3)

http://adodbapi.sourceforge.net/可以与CPython或IronPython一起使用。我一直很满意。

答案 5 :(得分:2)

PyPyODBChttp://code.google.com/p/pypyodbc)在PyPy,Ironpython和CPython下工作。

This article显示了一个在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

...

答案 6 :(得分:1)

我已将pymssql与标准python一起使用并喜欢它。如果你只是寻找基本的数据库访问,可能比提到的替代方案更容易。

示例code

答案 7 :(得分:0)

如果你想用CPython快速而肮脏的方式(也适用于3.X python):

安装python http://sourceforge.net/projects/pywin32/files/pywin32/

后安装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版本中完成了工作。