2013-03-25 19 views
19

İşte benim basit bir test senaryo bağlanamaz. Sadece basit bir seçim deyimi yapmaya çalışıyorum. Bir öğretici üzerindeki temel bitleri buldum.SQLAlchemy bir mssql veritabanı

from sqlalchemy import * 

db = create_engine('mssql+pyodbc://user:[email protected]_address/database_name')  

db.echo = True 
metadata = MetaData(db) 

users = Table('member', metadata, autoload=True) 

def run(stmt): 
    rs = stmt.execute() 
    for row in rs: 
     print row 

s = users.select(users.c.fname == 'Bill') 
run(s) 

etrafında arama ve birkaç çözümler çalışmakla bir saat sonra, ben başladığım zamankinden daha bunu çözmeye hiçbir yakınım. Umarım ... Sadece bir yerde basit bir hata yaptık, ama onu bulamadı olduğum

İşte

sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') None None 

Herhangi bir yardım çok takdir

alıyorum hatadır!

cevap

24

URL'de belirtilen Değilse, mssql+pyodbc lehçesi için varsayılan sürücü "SQL Server" olacağını [1]. Yani /etc/unixODBC/odbcinst.ini böyle okuyan bir bölümü olması gerektiği anlamına gelir: Eğer Yönetici Araçlarını açarsanız çünkü Windows üzerinde "otomatik olarak" çalışır

[SQL Server] 
Driver=/path/to/library.so 

->Veri Kaynakları (ODBC), büyük olasılıkla Sürücüler sekmesi altındaki "SQL Server" adlı bir girdi bulur.

Linux üzerinde, FreeTDS sürücüyü veya Microsoft'tan resmi sürücüyü (bu tavsiye) kullanabilir.

sürücüsünü yükledikten sonra, /etc/unixODBC/odbcinst.ini böyle bir şey olmalıdır:

[FreeTDS] 
Driver=/usr/lib/libtdsodbc.so 
Threading=1 

[ODBC Driver 11 for SQL Server] 
Description=Microsoft ODBC Driver 11 for SQL Server 
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0 
Threading=1 
UsageCount=1 

Sonra, sadece değerle, URL'ye driver sorgu dizesi parametresi eklemek zorunda Bu bölüm adıyla eşleşiyor. FreeTDS ile

Örnek URL: Resmi sürücüsü ile

mssql+pyodbc://user:[email protected]_address/database_name?driver=FreeTDS 

Örnek URL:

mssql+pyodbc://user:[email protected]_address/database_name?driver=ODBC+Driver+11+for+SQL+Server 

[1] https://bitbucket.org/sqlalchemy/sqlalchemy/src/aa3a8f016f3e4396d125b18b0510abdf72aa8af2/lib/sqlalchemy/dialects/mssql/pyodbc.py?at=default#cl-236

doğrudan ODBC bağlantısını test hakkında gitmek nasıl
+0

+1 Harika bir açıklama. Bu kadar tökezledikçe çok farklı şeyler denedim. Benim sorunum, bu ekstra parametre olmadan bir windows sunucuda iyi çalışıyor gibi bağlantı dizesinde sürücü adı ekleyerek kodu değiştiremedim. Yani devam ettim ve başka bir girdiyi oluşturulan benim '/ etc/odbcinst.ini' denilen' [SQL Server] 've benim giriş ve voila için' [SQL Server Native Client 11.0] 'altındaydı kopyalanan her şey! her şey çalışıyor ... –

+3

SQLAlchemy, Windows'ta bile varsayılan odbc sürücüsünü bulamadı. "? Driver = SQL + Server" eklemek benim sorunumu çözdü.Eşittir işaretinin adının, Yönetimsel Araçlar/Veri Kaynakları/Sürücüler – Matej

+0

altında bulunan sürücü adınızla eşleşmesi gerektiğini unutmayın. En son MS sürücüsü (v13) şu adreste bulunabilir: https://msdn.microsoft.com/en-us/ library/hh568451% 28v = sql.110% 29.aspx Sürücü Yöneticisi'ni kurun, tüm bağımlılıkların bulunduğundan emin olun ve sürücüyü yükleyin. – iled

1

sen gösterebilir aldığınız hata adı IM002 ile hiçbir DSN kurulum yoktur. Düzgün kurulduğunu doğrulamak için ODBC bağlantısını doğrudan denemeyi denediniz mi? Uygun Microsoft SQL Server veritabanı sürücüleri yüklü mü?

+0

? Ben sadece pyodbc ile windows altında bir python script ile ona bağladım ve iyi çalıştı. Ayrıca mssql db sürücülerinin linux sistemimde bulunduğuna inanıyorum, fakat yanılmış olabilirim. Bu pyodbc ve unixodbc mi? – Scott

+0

IM002 sadece bir hata kodu. DSN ile ilgisi yok. – sayap