在daily数据库遍历所有表格,所有表格有特殊字符,都需要加反引号 对于每个表格,查询net_mf_amount列的数据,按照trade_date降序排列 对查询结果进行pandas计算,a和b列均已存在,不需要判断,对net_mf_amount列的前一天的数据减去今天的数据放在a列, 将a列的值前一天的数据减去今天的数据放在b列,如果a和b之前计算过,则跳过计算下一个值 保存a和b列的值 继续处理下一个表格,直到处理完所有表格
时间: 2024-02-10 20:10:46 浏览: 118
好的,我明白了您的问题。需要遍历daily数据库中的所有表格,对于每个表格查询net_mf_amount列的数据,按照trade_date降序排列,然后对查询结果进行pandas计算,计算规则为对net_mf_amount列的前一天的数据减去今天的数据放在a列,将a列的值前一天的数据减去今天的数据放在b列,如果a和b之前计算过,则跳过计算下一个值,最后保存a和b列的值。我会为您提供一个Python代码实现,如下所示:
```
import pandas as pd
import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='daily')
# 获取所有表格名称
cursor = conn.cursor()
cursor.execute("show tables;")
tables = [table[0] for table in cursor.fetchall()]
# 遍历所有表格
for table in tables:
# 查询net_mf_amount列的数据,按照trade_date降序排列
sql = "select trade_date, net_mf_amount from `{}` order by trade_date desc;".format(table)
df = pd.read_sql(sql, conn)
# 对查询结果进行计算,将结果保存在a和b列中
if 'a' not in df.columns:
df['a'] = pd.Series([None]*len(df))
df['b'] = pd.Series([None]*len(df))
for i in range(len(df)):
if i == 0:
df.at[i, 'a'] = None
df.at[i, 'b'] = None
else:
if pd.isna(df.at[i, 'a']) and pd.isna(df.at[i, 'b']):
df.at[i, 'a'] = df.at[i-1, 'net_mf_amount'] - df.at[i, 'net_mf_amount']
df.at[i, 'b'] = df.at[i-1, 'a'] - df.at[i, 'a']
# 保存a和b列的值
cursor.execute("alter table `{}` add column if not exists a varchar(50);".format(table))
cursor.execute("alter table `{}` add column if not exists b varchar(50);".format(table))
for i in range(len(df)):
if pd.isna(df.at[i, 'a']) or pd.isna(df.at[i, 'b']):
continue
sql = "update `{}` set a = '{}', b = '{}' where trade_date = '{}';".format(table, df.at[i, 'a'], df.at[i, 'b'], df.at[i, 'trade_date'])
cursor.execute(sql)
# 提交修改并关闭连接
conn.commit()
cursor.close()
conn.close()
```
这段代码使用了pandas和pymysql库来实现对数据库的操作。首先连接数据库,并获取所有表格名称。然后遍历所有表格,对于每个表格查询net_mf_amount列的数据,按照trade_date降序排列。接着对查询结果进行计算,将结果保存在a和b列中。最后保存a和b列的值,并关闭连接。
注意:这段代码仅供参考,具体实现可能需要根据您的数据库结构进行修改。
阅读全文