创建一个函数以将 SQL 查询转换为 Pandas df



我想创建一个函数,允许用户输入SQL查询并将其转换为Pandas df。 到目前为止,我已经尝试了以下方法:

def dataset():
raw_sql_query = input("Enter your SQL query: ")
sql_query = """" " + raw_sql_query + " """" 
sql3 =
sql_query
df = pd.io.sql.read_sql(sql3, cnxn)
df.head()

这会产生错误:

File "<ipython-input-18-6b10c2bc776f>", line 4
sql_query = """" " + raw_sql_query + " """"
^
SyntaxError: EOL while scanning string literal

我还尝试了上述代码的一些类似版本,包括:

def dataset():
raw_sql_query = input("Enter your SQL query: ")
sql_query = """"" + raw_sql_query + """"" 
sql3 =
sql_query 
df = pd.io.sql.read_sql(sql3, cnxn)
df.head()

这导致了以下错误:

File "<ipython-input-23-e501c9746878>", line 5
sql3 =
^
SyntaxError: invalid syntax

这样的功能可能吗? 如果是这样,我将如何为此操作创建工作函数? 我读过的所有关于函数的文档都只包括打印"Hello World"或基本加法/减法/等内容的示例 - 所以不是很有用。

编辑: 使用这样的pandas.read_sql_query

def dataset():
"""This functions allows you to input a SQL query and it will be transformed into a Pandas dataframe"""
raw_sql_query = input("Enter your SQL query: ")
sql_query = """"" + raw_sql_query + """"" 
sql3 = sql_query 
df = pd.io.sql.read_sql(sql3, cnxn)
df.head()

这不会返回错误,但也不会返回预期的结果。 它不返回任何内容。

我喜欢sqlalchemy结合到pandas.read_sql的灵活性。这是我使用的代码:

import sqlalchemy as sa
def bindQuery(query, **params):
for key, value in params.items():
key =  f":{key}"
if isinstance(value, str):
value = f"'{value}'"
query = query.replace(key, str(value))
query = query.replace("n", " ").replace("t", " ")
return query

def readQuery(query, engine, **params):
query = bindQuery(query, **params)
return pd.read_sql(query, engine)

因此,当我必须运行以下QUERY


QUERY = """
SELECT count(*) 
FROM table
where id in :ids
"""
ids = (1, 2, 3)
df = readQuery(query=QUERY,
engine=my_engine,
ids=ids)

最新更新