Я использую Python Версия: 3.7.3 (по умолчанию, 27 марта 2019, 17:13:21) [MS C v.1915 64 бит (AMD64)] Pandas Версия: 0.25.3
У меня есть два кадра данных
import pandas as pd
data = {'PID':[739453003, 739453003, 578598449],
'name':['name_1', 'name_2', 'name_3']}
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data)
, и я хочу преобразовать в sql, и с помощью sqlalchemy отразить их в целом и query
в сгенерированных классах. После поиска я закончил со следующим кодом, но сгенерированные классы не будут иметь метод query
.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import DeferredReflection
from sqlalchemy.engine import reflection
eng = create_engine('sqlite:///:memory:', echo=False)
df.to_sql('df1', eng, schema='main', if_exists='replace', index=False)
df.to_sql('df2', eng, schema='main', if_exists='replace', index=False)
Base = declarative_base(eng)
class Df1(DeferredReflection, Base):
__tablename__ = 'df1'
class Df2(DeferredReflection, Base):
__tablename__ = 'df2'
insp = reflection.Inspector.from_engine(eng)
print(insp.get_table_names())
['df1', 'df2']
print(get_class_by_tablename('df1', Base))
print(get_class_by_tablename('df2', Base))
<class '__main__.Df1'>
<class '__main__.Df2'>
Теперь
print(Df1.query.all())
выдает сообщение об ошибке
AttributeError Traceback (most recent call last)
<ipython-input-108-26c06e0e3d75> in <module>
----> 1 print(Df1.query.all())
AttributeError: type object 'Df1' has no attribute 'query'
Любые предложения о том, как я могу получить доступ к методам предоставляется sqlalchemy, как если бы классы моделей были сконструированы явно?
(get_class_by_tablename
определение)
def get_class_by_tablename(table_fullname, base):
for c in base._decl_class_registry.values():
if hasattr(c, '__table__') and c.__table__.fullname == table_fullname:
return c