Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Problema Creando y buscando el Banco SQL

Hola, pueden ayudarme con este problema en el momento de crear el banco en memoria:

from sqlalchemy import create_engine, MetaData, Table

engine = create_engine('sqlite:///:memory:') matriculas_por_curso.to_sql('matriculas', engine) print(engine.table_names())

y el print genera el siguiente error:

AttributeError Traceback (most recent call last) in <cell line: 1>() ----> 1 print(engine.table_names())

AttributeError: 'Engine' object has no attribute 'table_names'

además, he intentado buscar en el banco:

query = ''select * from matriculas where total < 20''
                                                  
pd.read_sql(query, engine), este codigo genera el error:
                                                   
                                                   

AttributeError Traceback (most recent call last) in <cell line: 1>() ----> 1 pd.read_sql(query, engine)

2 frames /usr/local/lib/python3.10/dist-packages/pandas/io/sql.py in execute(self, *args, **kwargs) 1403 def execute(self, *args, **kwargs): 1404 """Simple passthrough to SQLAlchemy connectable""" -> 1405 return self.connectable.execution_options().execute(*args, **kwargs) 1406 1407 def read_table(

AttributeError: 'OptionEngine' object has no attribute 'execute'

2 respuestas
solución!

Hola, la función engine.table_names() fue actualizada: https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine.table_names

Puedes usar la función inspect() para obtener información en tiempo de ejecución sobre cualquier objeto de SQLAlchemy, incluido el motor (engine). Esto crea un objeto de inspección que puede ser consultado para obtener más información.

El comando de código que puedes usar es el siguiente:

from sqlalchemy import create_engine, MetaData, Table, inspect
engine = create_engine('sqlite://')
inspection = inspect(engine)
matriculas_por_curso.to_sql('matriculas', engine)
inspection.get_table_names()

Espero haber ayudado, buenos estudios! :)

Si este post te ayudó, por favor, marca como solucionado ✓.

Erikabellidoalarcon,

Me sirvió mucho la solución planteada, porque me permitió configurar las variables para poder hacer la consulta posteriormente, pero cuando hago la cosulta como tal, utilizando "engine" me genera un error; sin embargo importé la libreria "sqlite3" y con eso pude resolver hasta poder lograr la consulta de un string con :

  • from sqlite3 import connect
  • conn = connect(':memory:')
  • matriculas_por_curso.to_sql(name='test_data', con=conn)
  • query = 'select * from test_data where Total < 20'
  • pd.read_sql(query, conn)

Hasta aquí está bien, me da el resultado esperado; cuando continúo con la clase debo hacer otra consulta con el método:

  • pd.read_sql_table(table_name='test_data',con=conn, columns='Total')

y me genera el error nuevamente, lo que no me permite avanzar con la clase, esto es una situación desesperante, je, je, porque se supone que debería dar el resultado. El error es que no consigue un atributo o no consigue un valor de alguna variable atribuida a la carga en SQL., el código del error es el siguiente:


AttributeError Traceback (most recent call last) in <cell line: 1>() ----> 1 pd.read_sql_table(table_name='test_data',con=conn, columns='Total')

/usr/local/lib/python3.10/dist-packages/pandas/io/sql.py in read_sql_table(table_name, con, schema, index_col, coerce_float, parse_dates, columns, chunksize) 284 # error: Item "SQLiteDatabase" of "Union[SQLDatabase, SQLiteDatabase]" 285 # has no attribute "read_table" --> 286 table = pandas_sql.read_table( # type: ignore[union-attr] 287 table_name, 288 index_col=index_col,

AttributeError: 'SQLiteDatabase' object has no attribute 'read_table'