Errore di connessione del database di SQLalchemy e ADODBAPI
-
11-12-2019 - |
Domanda
Sto tentando di connettersi a un database MSSQL SQLEXPRESS 2012 utilizzando SQLalchemy 0.7.8 e ADODAPI 2.4.2.2 su Ironpython 2.7.3
Sono in grado di creare un motore SQLalchemy, tuttavia quando viene fatta una query, ottengo: "TypeError: Object 'NoneType' è unsoccritto"
Traceback:
Traceback (most recent call last):
File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 878, in __init__
File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2558, in raw_connection
File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\pool.py", line 183, in unique_connection
File "<string>", line 9, in <module>
File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2472, in connect
TypeError: 'NoneType' object is unsubscriptable
.
Codice utilizzato:
def conn():
return adodbapi.connect('Provider=SQLOLEDB; Data Source=SERVER\SQLEXPRESS;
Initial Catalog=db; User ID=user; Password=pass;')
engine = create_engine('mssql+adodbapi:///', creator=conn,
echo = True, module=adodbapi)
.
Adodbapi sembra funzionare bene su è proprio, cioè.Posso creare una connessione e quindi utilizzare un cursore da interrogare senza problemi, sembra essere qualcosa in SQLalchemy.
Chiunque qualsiasi idea?
Soluzione
E abbiamo una soluzione alternativa:
import adodbapi
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import sessionmaker
import sqlalchemy.pool as pool
def connect():
return adodbapi.connect('Provider=SQLOLEDB.1;Data Source=mypcname\SQLEXPRESS;\
Initial Catalog=dbname;User ID=user; Password=pass;')
mypool = pool.QueuePool(connect)
conn = mypool.connect()
curs = conn.cursor()
curs.execute('select 1') #anything that forces open the connection
engine = create_engine('mssql+adodbapi://', module=adodbapi, pool = mypool)
Session = sessionmaker()
Session.configure(bind=engine)
sess = Session()
.
Con questo oggetto della mia sessione funziona come normale.
Probabilmente non utilizzo il dialetto Adodbapi come previsto da chi ha reso, ma non riesco a trovare alcuna documentazione, quindi questo è quello che sono andato per ora.
Altri suggerimenti
Adodbapi abbastanza sicuro non funziona con SQLalchemy.
Il dialetto Adodbapi non è implementato per 0.6 in questo momento.
Scorri fino in fondo, (questa è una documentazione di 0,7x), ho anche controllato 0,8 documentazione e dice la stessa cosa.
Sembra che tu dovrai cambiare quale driver stai usando.
I Uso SQLALCMY per connettersi a un database PostgreSQL utilizzando PSYCOPG2.Non sono sicuro, ma leggendo la documentazione, penso che tu abbia bisogno di scaricare il pyodbc ,Sembra essere meglio supportato di Adodbapi.Dopo averlo installato, prova la seguente istruzione per creare il motore
engine = create_engine(mssql+pyodbc://user:pass@host/db)
.
O puoi controllare diversi modi di scrivere la stringa di connessione qui .