2013-04-01 14 views
8

Sto provando a connettermi a un database di SQL Server 2012 utilizzando SQLAlchemy (con pyodbc) su Python 3.3 (Windows 7-64-bit). Sono in grado di connettermi usando pyodbc dritto ma non ho avuto successo con la connessione usando SQLAlchemy. Ho installato il file dsn per l'accesso al database.Connessione a SQL Server 2012 utilizzando sqlalchemy e pyodbc

mi collego con successo utilizzando pyodbc dritto come questo:

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

Per sqlalchemy ho provato:

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

Il metodo create_engine in realtà non impostare la connessione e riesce, ma iSe Provo qualcosa che fa sì che sqlalchemy configuri effettivamente la connessione (come engine.table_names()), ci vuole un po 'ma poi restituisce questo errore:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

Non sono sicuro di dove le cose stiano andando male sono come vedere quale stringa di connessione viene effettivamente passata a pyodbc da sqlalchemy. Ho usato con successo le stesse classi di sqlalchemy con SQLite e MySQL.

Grazie in anticipo!

risposta

21

La stringa DSN basata su file viene interpretata da SQLAlchemy come nome server = c, nome database = users.

Preferisco connettermi senza utilizzare i DSN, è un'attività di configurazione in meno da gestire durante le migrazioni di codice.

Questa sintassi funziona utilizzando l'autenticazione di Windows:

engine = sa.create_engine('mssql+pyodbc://server/database') 

O con l'autenticazione di SQL:

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

SQLAlchemy ha una spiegazione approfondita delle diverse opzioni stringa di connessione here.

+2

Grazie. L'istanza di SQL Server è l'unica che non è sulla macchina su cui sto lavorando quindi non ero sicuro se ci fosse qualcosa di divertente da fare qui. Solo per espandere un po 'le punture elencate (poiché le istanze del server sql sono apparentemente denominate) - 'sa.create_engine (' mssql + pyodbc: // [nomecomputer] \\ [nomeserver]/[database] ')' –

+1

Essi don essere nominati In realtà è più facile connettersi e utilizzare un'istanza del server SQL configurata come "istanza predefinita". Le istanze nominate sono richieste quando ospiterete istanze multiple di server SQL su un server. – marr75

6

Ho un aggiornamento informazioni sulla connessione a MSSQL Server senza utilizzare i DSN e utilizzando l'autenticazione di Windows. Nel mio esempio ho le seguenti opzioni: Il mio nome del server locale è "(localdb) \ ProjectsV12". Nome del server locale che vedo dalle proprietà del database (sto usando Windows 10/Visual Studio 2015). Il mio nome db è "MainTest1"

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

E 'necessario specificare conducente di connessione. Puoi trovare il tuo versione client in:

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

sguardo su SQL versione Native Client dalla lista.

+0

Questo è l'unico che ha funzionato per me. Grazie molto! – Barka

Problemi correlati