Error de conexión de base de datos SQLALCHEMY y ADODBAPI
-
11-12-2019 - |
Pregunta
Estoy intentando conectarme a una base de datos de MSSQL SQLEXPRESS 2012 usando SQLALCHEMY 0.7.8 y Adodapi 2.4.2.2 en IronPhyThon 2.7.3
Soy capaz de crear un motor SQLALCHEMY, sin embargo, cuando se hace una consulta que reciba: "TypeError: 'NonEtype' Objeto no está sumergible"
Corrector:
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
Código usado:
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 parece funcionar bien en su propio, es decir.Puedo crear una conexión y luego usar un cursor para consultar sin ningún problema, parece ser algo en Sqlalchemy.
¿Alguien alguna idea?
Solución
y tenemos una solución:
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 este objeto de la sesión funciona de forma normal.
Probablemente no estoy usando el dialecto AdodBapi como lo pretende que lo haya hecho, pero no puedo encontrar ninguna documentación, por lo que es de lo que he ido por ahora.
Otros consejos
Bastante seguro de Adodbapi no funciona con SQLALCHEMY.
El dialecto AdodBapi no se implementa durante 0.6 en este momento.
Desplácese hasta la parte inferior, (esta es 0.7x Documentation), también revisé 0.8 Documentation y dice lo mismo.
Suena como si tuvieras que cambiar qué controlador estás usando.
Utilizo SQLALCMY para conectarse a una base de datos PostgreSQL usando el PsyCOPG2.No estoy seguro, pero al leer la documentación, creo que necesitas descargar el pyodbc ,Parece ser mejor apoyado que Adodbapi.Una vez que lo haya instalado, intente la siguiente declaración para crear el motor
engine = create_engine(mssql+pyodbc://user:pass@host/db)
O puede consultar diferentes formas de escribir la cadena de conexión aquí .