如何在将sql查询作为用户输入并通过UDF处理后以pandas格式返回df?如何处理数据库/操作错误?[关闭]

gorkyyrv  于 2023-11-15  发布在  其他
关注(0)|答案(1)|浏览(95)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

4天前关闭。
Improve this question
我用的是SQLite3和Pandas。我想把用户的查询作为输入,并从一个函数'run_query'中获取结果,该函数简单地返回 Dataframe 。
a.我希望重复输入,直到用户决定退出B.如果查询未运行,我希望通知用户更新查询
我试着这样做:
为真时:
query = input('Enter your query(输入exit以中止查询!):')
如果query.lower()!=“退出”:
尝试:
run_query(查询,连接)
操作错误除外:
print(“请重新构建您的查询!”)continue
否则:
打破
它会导致以下行为:
a.返回有效查询但不显示结果,再次要求输入。b.在'try'后添加print语句,打印查询结果,再次要求输入,但Pandas格式丢失。c.查询不正确时,抛出NameError:'Operational Error'未定义并中止。d.在接收到'exit'作为输入时退出
我怎么能
a.获取Pandas格式的 Dataframe ,不打印?在run_query函数中,我只是简单地做了'return pd.read_sql(query,sql_connection)'。
B.如何处理收到错误查询时的DatabaseError/OperationalError并要求再次输入?
任何帮助都将意义非凡!

k5hmc34c

k5hmc34c1#

a:您可以捕获run_query函数返回的DataFrame,如果它不为空,则打印它。下面是一个更新的代码片段:while True:query = input('输入您的查询(键入exit以中止!):')

if query.lower() == 'exit':
        break
    
    try:
        result = run_query(query, conn)
        if not result.empty:
            print(result)
    except OperationalError:
        print("Please reframe your query!")

字符串
B:要处理潜在的错误并再次请求输入,您可以捕获OperationalError并提示用户输入新查询。您可以像这样修改代码:

while True:
    query = input('Enter your query (Type exit to abort!): ')
    
    if query.lower() == 'exit':
        break
    
    try:
        result = run_query(query, conn)
        if not result.empty:
            print(result)
    except OperationalError as e:
        print("Error:", e)
        print("Please reframe your query and try again.")

相关问题