Pergunta

Estou tentando me conectar a um banco de dados mssql SQLExpress 2012 usando sqlalchemy 0.7.8 e adodapi 2.4.2.2 no IronPython 2.7.3

Consigo criar um mecanismo sqlalchemy, porém quando uma consulta é feita recebo:"Erro de tipo:O objeto 'NoneType' não pode ser assinado"

Rastreamento de volta:

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 sendo 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 bem por si só, ou seja.posso criar uma conexão e depois usar um cursor para consultar sem problemas, parece ser algo no sqlalchemy.

Alguém tem alguma ideia?

Foi útil?

Solução

E temos uma solução 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()

Com isso, meu objeto de sessão funciona normalmente.

Provavelmente não estou usando o dialeto adodbapi como pretendido por quem o criou, mas não consigo encontrar nenhuma documentação, então é isso que estou fazendo por enquanto.

Outras dicas

Tenho certeza que adodbapi não funciona com SQLAlchemy.

O dialeto adodbapi não está implementado para 0.6 no momento.

Role até o final (esta é a documentação 0,7x), também verifiquei a documentação 0,8 e diz a mesma coisa.

Parece que você terá que alterar o driver que está usando.

Eu uso o sqlalcmy para conectar-me a um banco de dados postgresql usando o psycopg2.Não tenho certeza, mas lendo a documentação, acho que você precisa baixar o pyodbc, parece ser melhor suportado que o adodbapi.Depois de instalá-lo, tente a seguinte instrução para criar o mecanismo

engine = create_engine(mssql+pyodbc://user:pass@host/db)

Ou você pode verificar diferentes maneiras de escrever a string de conexão aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top