Вы можете указать pandasql список имен / псевдонимов таблиц вместо простой передачи locals()
в соответствии с строкой документации PandasSQL.__call__
(не удается найти онлайн-версию документов):
:param env: Variables environment - a dict mapping table names to pandas dataframes.
Обратите внимание, что вы должны поместить туда все таблиц, которые вы хотите запросить.
Вот небольшой пример, использующий класс PandasSQL
вместо sqldf
, как рекомендовано в строке документации:
import pandasql
sql = pandasql.PandaSQL()
data_frames = [
pd.DataFrame({'a': [1,2,3]}),
pd.DataFrame({'b': [1,4,5]})
]
# create aliases for your dataframes
env = {'t%d' % (i + 1): df for i, df in enumerate(data_frames)}
# tell pandasql to use the aliases
print(sql('select t1.* from t1 join t2 on t1.a = t2.b', env=env))