DuckDB pandas通过名称轻松传递DataFrame并支持IntelliSense

1 投票
1 回答
47 浏览
提问于 2025-04-13 16:20

在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()

撰写回答