2013-04-15 14 views
8

Devo inviare unicode a SQL Server con Python 2.7. I failed with pymssql. Ora sto cercando di ottenere pypyodbc in funzione (al contrario di pyodbc), poiché fornisce working unicode examples. Il problema è che la stringa di connessione nell'esempio non assomiglia a qualcosa che riconosco. Ho guardato this, e, dopo un po 'di tentativi ed errori, ha costruito questa stringa:Connessione a SQL Server con pypyodbc

conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='MyPassword';DATABASE='db'") 

tornato un DatabaseError incentrata sulla stringa di connessione:

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs) 
---> 2 conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='password';DATABASE='db'") 

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs) 
---> 2273   self.connect(connectString, autocommit, ansi, timeout, unicode_results, readonly) 

C:\Anaconda\lib\site-packages\pypyodbc.pyc in connect(self, connectString, autocommit, ansi, timeout, unicode_results, readonly) 
---> 2321   check_success(self, ret) 

C:\Anaconda\lib\site-packages\pypyodbc.pyc in ctrl_err(ht, h, val_ret, ansi) 
---> 919     raise DatabaseError(state,err_text) 

DatabaseError: (u'08001', u'[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.') 

so che i miei credenziali sono corrette perché io Li ho usati per connettersi con successo usando pymssql. Cosa mi manca?

risposta

15

Rimuovere le singole citazioni dai server, uid, pwd, e database attributi della stringa di connessione:

conn = pypyodbc.connect("DRIVER={SQL Server};SERVER=MyServer;UID=me;PWD=password;DATABASE=db") 

Dal pypyodbc menzioni compatibilità con pyodbc, un minuto per guardare oltre gli esempi pyodbc connection string docs e pyodbc.connect(). Io uso questa sintassi in pyodbc:

cnxn = connect(driver='{SQL Server}', server='localhost', database='test', uid='me', pwd='me2') 
2

Tralasciando il numero di porta (1433) nella stringa di connessione, ha gettato errori a me da un client Linux (ma non Windows 7). Probabilmente è un problema di configurazione, ma non ho avuto il tempo di inseguirlo.

Mettere questo fuori là, nel caso in cui aiuti qualcun altro.