tables - Conexión a la base de datos de Vertica con SQLAlchemy
sqlalchemy query (2)
SQLAlchemy está usando unixODBC para conectarse a Vertica. Necesita instalar los controladores y configurar un DSN
Debería poder conectarse con estos parámetros. Esto es lo que funcionó para mí en mi proyecto anterior SQLAlchemy / Vertica. Además, si esto no funciona, me aseguraré de que esté configurado correctamente y de que pueda conectarse utilizando isql (viene con unixODBC).
drivername=''vertica+pyodbc'',
username=''myuser'',
password=''mypassword'',
host=''hostname'',
database=''DBNAME'',
También puede hacer esto para una conexión DSN:
engine = create_engine(''vertica+pyodbc://username:password@mydsn'')
Estoy intentando conectarme a una base de datos de Vertica usando SQLAlchemy.
Encontré e instalé un dialecto de Vertica en https://github.com/jamescasbon/vertica-sqlalchemy . También he instalado pyodbc.
Usando un tutorial básico en http://www.pythoncentral.io/sqlalchemy-orm-examples/ , tengo el siguiente fragmento de código: -
from sqlalchemy import Column, DateTime, String, Integer, ForeignKey, func
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Department(Base):
__tablename__ = ''department''
id = Column(Integer, primary_key=True)
name = Column(String)
engine = create_engine(sa.engine.url.URL(drivername=''vertica+pyodbc'',
username=''<username>'',password=''<password>'',
host=''<host>'',database=''<db name>'',))
session = sessionmaker()
session.configure(bind=engine)
Base.metadata.create_all(engine)
Cuando esto funciona, obtengo el traceback: -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 3291, in create_all
tables=tables)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1546, in _run_visitor
with self._optional_conn_ctx_manager(connection) as conn:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1539, in _optional_conn_ctx_manager
with self.contextual_connect() as conn:
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1729, in contextual_connect
self.pool.connect(),
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 332, in connect
return _ConnectionFairy._checkout(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 626, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 433, in checkout
rec = pool._do_get()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 945, in _do_get
return self._create_connection()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 278, in _create_connection
return _ConnectionRecord(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 404, in __init__
self.connection = self.__connect()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 527, in __connect
connection = self.__pool._creator()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 95, in connect
connection_invalidated=invalidated
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 185, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 89, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 376, in connect
return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.DBAPIError: (Error) (''IM002'', ''[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)'') None None
La última línea, supongo, es la que hay que mirar:
sqlalchemy.exc.DBAPIError: (Error) (''IM002'', ''[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)'') None None
Se pueden hacer conexiones a la base de datos desde otros clientes para que las credenciales, etc. estén bien.
No estoy seguro de qué está causando esto, ¿alguien puede ayudar?
¡Gracias por adelantado!
Esto está configurado para Ubuntu 14.04 suponiendo que tiene un controlador instalado en /opt/vertica/
y usando HP Vertica desde este Dockerfile https://hub.docker.com/r/sumitchawla/vertica/ y tiene https://github.com / jamescasbon / vertica-sqlalchemy .
/etc/vertica.ini
[Driver]
ErrorMessagesPath = /opt/vertica/lib64/
ODBCInstLib = /usr/lib/x86_64-linux-gnu/libodbcinst.so
DriverManagerEncoding=UTF-16
~ / .odbc.ini
[ODBC Data Sources]
vertica = "My Database"
[verticadsn]
Description = My Database
Driver = /opt/vertica/lib64/libverticaodbc.so
Database = docker
Servername = 127.0.0.1
UID = dbadmin
PWD =
Si hiciste todo bien, este comando debería devolver tu versión de Vertica
engine = create_engine(''vertica+pyodbc://dbadmin:@verticadsn'')
engine.connect().scalar(''select version()'')