DuckDB pandas通过名称轻松传递DataFrame并支持IntelliSense
在DuckDB中,我们需要直接把DataFrame的变量名当作字符串来用在SQL语法里(具体可以参考这里):
import pandas as pd
import duckdb
mydf = pd.DataFrame({'a' : [1, 2, 3]})
print(duckdb.query("SELECT SUM(a) FROM mydf").to_df())
但是在VS Code中,智能提示(IntelliSense)不会识别第二条语句中的mydf
,它会把mydf
标记为未引用。如果用智能提示重命名了mydf
,那么第二条语句肯定会出错。有没有办法让智能提示正常工作呢?
1 个回答
0
可以使用调试的f-string语法来提取变量名。这种方法和IntelliSense配合得很好,因为IntelliSense已经能够识别f-string的语法。
import pandas as pd
import duckdb
def main():
mydf = pd.DataFrame({'a' : [1, 2, 3]})
print(duckdb.query("SELECT SUM(a) FROM " + df_name(f"{mydf.size=}")).to_df())
def df_name(dbg_str):
"""gets the DataFrame variable name from the debug str minus the ".size"
attribute before the equals sign
Example:
```
>>> df = pd.DataFrame({"a": [1, 2, 3]})
>>> df_name(f"{df.size=}")
"df"
```
"""
return dbg_str[:dbg_str.index(".size=")]
if __name__ == "__main__":
main()