Подтвердить что ты не робот

Какой самый простой способ получить доступ к mssql с помощью python или ironpython?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

pyodbc поставляется с Activestate Python, который можно загрузить с здесь. Минимальный odbc script для подключения к базе данных 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

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

Ответ 5

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

Ответ 6

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

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

PyPyODBC имеет почти такое же значение, как и pyodbc, так как это можно рассматривать как повторную реализацию pyodbc moudle. Поскольку он написан на чистом Python, он также может работать на IronPython и PyPy.

Собственно, при переключении на pypyodbc в существующем script вы можете сделать это:

#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

...

Ответ 7

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

Пример code.

Ответ 8

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

Установите PYWIN32 после установки python 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

Затем вы используете информацию об API 1 odbc, как определено здесь: http://www.python.org/dev/peps/pep-0248/

Строка интерфейса подключения должна выглядеть примерно так (предполагая, что вы используете мой метод выше для получения имени драйвера ODBC, и это надежное соединение):

dbString = "Driver={SQLDriver};Server=[SQL Server];Database=[Database Name];Trusted_Connection=yes;".replace('{SQLDriver}', '{' + getSQLServerDriver() + '}')

Этот метод имеет много сторонних сторон. Это неудобно из-за поддержки только API ODBC 1, и есть несколько незначительных ошибок в API или драйвер ODBC, с которыми я столкнулся, но он выполняет эту работу во всех версиях CPython в Windows.