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

StackOverflow https://stackoverflow.com/questions/289978

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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]

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

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

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

...

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

Пример кода .

Если вам нужен быстрый и грязный способ работы с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top