将外部SQL文件读入Pandas数据框架

5jvtdoz2  于 2023-05-05  发布在  其他
关注(0)|答案(2)|浏览(101)

这是一个简单的问题,我还没能找到答案。我有一个带有两个命令的.SQL文件。我想让Pandas将这些命令的结果拉到DataFrame中。
SQL文件的命令也是如此,较长的查询使用今天的日期。

SET @todaydate = DATE(NOW());
SELECT ...long query....;

在建立连接(prod_db)后,我尝试以以下方式使用read_sql,并获得错误消息“NoneType”对象不可迭代

sqlpath = 'path.sql'
scriptFile = open(sqlpath,'r')
script = scriptFile.read()
df = pd.read_sql(script,prod_db)

我也尝试过使用这里描述的函数和方法reading external sql script in python,但我不确定如何将结果导入pandas Dataframe (或者我可能遗漏了什么)。它似乎没有阅读结果,因为我得到'命令跳过'反复。

def executeScriptsFromFile(filename):
    fd = open(filename, 'r')
    sqlFile = fd.read()
    fd.close()
    # all SQL commands (split on ';')
    sqlCommands = sqlFile.split(';')
    # Execute every command from the input file
    for command in sqlCommands:
        try:
            c.execute(command)
        except OperationalError, msg:
            print "Command skipped: ", msg
df = executescriptsfromfile(sqlpath)
vvppvyoh

vvppvyoh1#

我有一个解决方案可能对你有用。它应该给予你一个漂亮的小pandas.DataFrame
首先,必须读取sql文件中的查询。那么就使用pd.read_sql_query()而不是pd.read_sql()
我相信你知道,但这是函数的文件。

# Read the sql file and execute the query
with open('filename.sql', 'r') as query:
    # connection == the connection to your database, in your case prob_db
    DF = pd.read_sql_query(query.read(),connection)

我可以向你保证,它是与T-SQL,但我从来没有使用它与MySQL。

tag5nh1u

tag5nh1u2#

这是它如何为我工作的MWE:

query = open('./query_file.sql', 'r') 

db_config = {
            'server': server address,
            'port': port,
            'user': user,
            'password': password,
            'database': db name
        }

    try:
        sql_conn = pymssql.connect(**db_config)
        logging.info('SQL connection is opened')       
        avise_me_df = pd.read_sql(query.read(),sql_conn)
        logging.info('pandas df recorded')
    except OperationalError as e:
        connected = False

        logging.error('Error reading data from SQL table')
    else:
        connected = True
    finally:
        if connected:
            sql_conn.close()
            logging.info('SQL connection is closed')

希望这能帮上忙。

相关问题