Какой самый простой способ получить доступ к mssql с помощью python или ironpython? - PullRequest
23 голосов
/ 14 ноября 2008

У меня запущен mssql 2005 на моем персональном компьютере с базой данных, на которой я хотел бы запустить некоторые скрипты на python. Я ищу способ сделать действительно простой доступ к данным. Я хотел бы запустить несколько операторов select, обработать данные и, возможно, сделать так, чтобы python сохранил текстовый файл с результатами.

К сожалению, несмотря на то, что я немного знаю о Python и немного о базах данных, мне очень сложно определить, просто читая, выполняет ли библиотека то, что я хочу. В идеале мне бы хотелось, чтобы что-то работало для других версий mssql, было бесплатным и лицензировано для коммерческого использования, просто в использовании и, возможно, работает с ironpython.

Ответы [ 8 ]

26 голосов
/ 19 ноября 2008

Кажется, что у всех остальных есть сторона cPython -> SQL Server. Если вы хотите использовать IronPython, вы можете использовать стандартный API ADO.NET для связи с базой данных:

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, вам не нужно ничего устанавливать.

Доступно множество документов здесь и здесь .

19 голосов
/ 14 ноября 2008

Я использую SQL Alchemy с cPython (хотя я не знаю, будет ли он работать с IronPython). Это будет довольно знакомо вам, если вы использовали Hibernate / nHibernate. Если это слишком многословно для вас, вы можете использовать Elixir , который является тонким слоем поверх SQL Alchemy. Чтобы использовать любой из них, вам понадобится pyodbc , но это довольно простая установка.

Конечно, если вы хотите написать прямой SQL и не использовать ORM, вам просто нужен pyodbc.

12 голосов
/ 15 ноября 2008

pyodbc поставляется с Activestate Python, который можно загрузить с здесь . Минимальный сценарий odbc для подключения к базе данных SQL Server 2005 выглядит следующим образом:

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]
4 голосов
/ 14 ноября 2008

Я также успешно использую pymssql с CPython. (С SQLAlchemy и без него).

3 голосов
/ 23 апреля 2009

http://adodbapi.sourceforge.net/ можно использовать с CPython или IronPython. Я был очень доволен этим.

2 голосов
/ 27 сентября 2012

PyPyODBC (http://code.google.com/p/pypyodbc) работает под PyPy, Ironpython и CPython.

В этой статье показан пример Hello World для доступа к mssql в Python.

PyPyODBC используется почти так же, как и pyodbc, поскольку его можно рассматривать как повторную реализацию moudle 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 голос
/ 15 ноября 2008

Я использовал pymssql со стандартным python и мне понравилось. Возможно, проще, чем упомянутые альтернативы, если вы просто ищете базовый доступ к базе данных.

Образец код .

0 голосов
/ 15 сентября 2011

Если вы хотите быстрый и грязный способ с CPython (также работает для 3.X Python):

Установите PYWIN32 после установки python http://sourceforge.net/projects/pywin32/files/pywin32/

Импорт следующей библиотеки: импорт odbc

Я создал следующий метод для получения драйвера odbc для SQL Server (он немного отличается в именовании в зависимости от вашей версии 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, с которыми я столкнулся, но он выполняет свою работу во всех версиях CPython в Windows.

...