ما هي أبسط طريقة للوصول إلى MSSQL مع Python أو Ironpython؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

لقد حصلت على MSSQL 2005 على جهاز الكمبيوتر الشخصي الخاص بي مع قاعدة بيانات أود تشغيل بعض البرامج النصية Python. أنا أبحث عن طريقة للقيام ببعض الوصول البسيط حقًا إلى البيانات. أرغب في تشغيل بعض العبارات المحددة ، ومعالجة البيانات وربما يكون لديك Python حفظ ملف نصي مع النتائج.

لسوء الحظ ، على الرغم من أنني أعرف قليلاً عن Python وقليلًا عن قواعد البيانات ، إلا أنه من الصعب جدًا أن أخبرني ، فقط من القراءة ، إذا كانت المكتبة تفعل ما أريد. من الناحية المثالية ، أود أن يكون هناك شيء يعمل مع إصدارات أخرى من MSSQL ، مجانًا ومرخصًا للسماح بالاستخدام التجاري ، وهو سهل الاستخدام ، وربما يعمل مع IronPython.

هل كانت مفيدة؟

المحلول

أنا أستعمل SQL Alchemy مع Cpython (لا أعرف ما إذا كان سيعمل مع IronPython رغم ذلك). سيكون الأمر مألوفًا لك إذا كنت قد استخدمت Hibernate/Nhibernate. إذا كان هذا مطولًا جدًا بالنسبة لك ، فيمكنك استخدامه إكسير, ، وهي طبقة رقيقة أعلى SQL Alchemy. لاستخدام أي من هؤلاء ، ستحتاج بيودب, ، ولكن هذا تثبيت بسيط جدا.

بالطبع ، إذا كنت ترغب في كتابة SQL مباشرة وعدم استخدام ORM ، فأنت بحاجة فقط إلى PyoDBC.

نصائح أخرى

يبدو أن كل شخص آخر لديه جانب خادم Cpython -> SQL. إذا كنت ترغب في استخدام 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 ، فلن تحتاج إلى تثبيت أي شيء آخر.

الكثير من المستندات المتاحة هنا و هنا.

يأتي PyoDBC مع Python Activestate ، والذي يمكن تنزيله من هنا. يبدو أن البرنامج النصي 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 مع بيثون القياسية وأحبها. ربما أسهل من البدائل المذكورة إذا كنت فقط تبحث عن الوصول إلى قاعدة البيانات الأساسية.

عينة الشفرة.

إذا كنت تريد الطريق السريع والقذر مع cpython (يعمل أيضًا لـ 3.x python):

تثبيت Pywin32 بعد تثبيت Python http://sourceforge.net/projects/pywin32/files/pywin32/

استيراد المكتبة التالية: استيراد 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 الذي قمت بتشغيله ، لكنه ينجز المهمة في جميع إصدارات CPYthon في Windows.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top