gpt4 book ai didi

python - 在 Pandas Dataframe 上执行 SQL 并将结果存储在同一 Dataframe 中

转载 作者:行者123 更新时间:2023-12-01 01:13:37 26 4
gpt4 key购买 nike

current dataframe

我有一个与上图类似的数据框。我想要做的是循环遍历 SQL_SCRIPT 下的 SQL 语句,执行它们,并将结果存储在下一列中,该列称为“RESULTS”。当我尝试执行它(不将其存储在任何地方)时,它运行良好,但是当我尝试将结果存储在新的数据帧列中时,它会出错:

ValueError: cannot set a row with mismatched columns

这是代码:

def run_tests(self):
s = self.connection()
df = self.retrieve_sql()
df_type = df.loc[df['STEP_TYPE'] == 'T']
df_to_list = df_type[['TABLE_NM', 'TEST_TABLE_NM', 'SQL_SCRIPT']]
print(df_to_list)
for sql_script in df_to_list['SQL_SCRIPT']:
df_to_list.loc['RESULTS'] = pd.read_sql(sql_script,s)
print(df_to_list)

我也尝试过使用 session 执行来代替 read_sql,这也有效,但我不确定如何将结果存储到该路径的数据帧中:

def run_tests(self):
s = self.connection()
df = self.retrieve_sql()
df_type = df.loc[df['STEP_TYPE'] == 'T']
df_to_list = df_type[['TABLE_NM', 'TEST_TABLE_NM', 'SQL_SCRIPT']]
print(df_to_list)
for sql_script in df_to_list['SQL_SCRIPT']:
s.execute(sql_script)

如果需要的话,这是连接函数:

def connection(self):
con = self.load_json_file()
cfg_dsn = con['config']['dsn']
cfg_usr = con['config']['username']
cfg_pwd = con['config']['password']

udaExec = teradata.UdaExec(appName="DataAnalysis", version="1.0", logConsole=False)
session = udaExec.connect(method="odbc", dsn=cfg_dsn, username=cfg_usr, password=cfg_pwd)

return session

最佳答案

考虑运行Series.apply在 SQL 字符串列上。

def run_tests(self):
s = self.connection()
c = s.cursor() # OPEN CURSOR
df = self.retrieve_sql()

df_type = df.loc[df['STEP_TYPE'] == 'T']
df_to_list = df_type[['TABLE_NM', 'TEST_TABLE_NM', 'SQL_SCRIPT']]
print(df_to_list)

# NEW METHOD TO RUN QUERY
def sql_run(x):
c.execute(x)
if c.rowcount > 0:
res = c.fetchone()[0]
else:
res = np.nan
return res

df_to_list['RESULTS'] = df_to_list['SQL_SCRIPT'].apply(sql_run)
print(df_to_list)

关于python - 在 Pandas Dataframe 上执行 SQL 并将结果存储在同一 Dataframe 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54597660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com