在daily数据库遍历所有表格,所有表格有特殊字符,都需要加反引号 对于每个表格,查询net_mf_amount列的数据,按照trade_date降序排列 对查询结果进行pandas计算,a和b列均已存在,不需要判断,对net_mf_amount列的今天的减去前一天的数据放在a列, 将a列的值今天的减去前一天的数据放在b列,如果a和b之前计算过,则跳过计算下一个值,如果前一天数据为null则一直向前找直到有不为null的值,如果今天的值为null,则不计算,直到今天的值不为null, 保存a和b列的值 继续处理下一个表格,直到处理完所有表格
时间: 2024-02-11 17:06:11 浏览: 45
好的,我明白你的问题了。这是一个关于数据库查询和数据计算的问题,需要进行一些编程来解决。
首先,我们需要连接到数据库,并获取所有表格的名称。然后,我们使用反引号将表格名称包装起来,以便可以在包含特殊字符的表格名称上运行查询。
接下来,我们可以使用循环来遍历所有表格,并对每个表格运行查询。我们可以使用pandas来处理查询结果,并将计算后的值存储在a和b列中。
在计算过程中,我们需要检查a和b列之前是否已经计算过。我们还需要检查前一天的数据是否为null,并一直向前查找直到找到不为null的值。如果今天的值为null,则不计算,直到今天的值不为null。
最后,我们将处理后的结果保存到数据库中,并继续处理下一个表格,直到处理完所有表格。
下面是一个示例代码,可以作为参考:
```python
import pandas as pd
import pymysql
# 连接到数据库
conn = pymysql.connect(host='localhost', user='user', password='password', database='database')
# 获取所有表格的名称
cursor = conn.cursor()
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
# 遍历所有表格
for table in tables:
table_name = table[0]
table_name_quoted = '`' + table_name + '`'
# 查询net_mf_amount列的数据
query = "SELECT trade_date, net_mf_amount FROM " + table_name_quoted + " ORDER BY trade_date DESC"
df = pd.read_sql_query(query, conn)
# 计算a和b列
a_column = []
b_column = []
for i in range(len(df)):
if i == 0:
a_column.append(None)
b_column.append(None)
else:
if pd.notnull(df.iloc[i]['net_mf_amount']) and pd.notnull(df.iloc[i-1]['net_mf_amount']):
if i-2 >= 0:
if pd.notnull(df.iloc[i-2]['net_mf_amount']):
a = df.iloc[i]['net_mf_amount'] - df.iloc[i-1]['net_mf_amount']
b = df.iloc[i]['net_mf_amount'] - df.iloc[i-2]['net_mf_amount']
a_column.append(a)
b_column.append(b)
else:
j = i-3
while j >= 0:
if pd.notnull(df.iloc[j]['net_mf_amount']):
a = df.iloc[i]['net_mf_amount'] - df.iloc[i-1]['net_mf_amount']
b = df.iloc[i]['net_mf_amount'] - df.iloc[j]['net_mf_amount']
a_column.append(a)
b_column.append(b)
break
j -= 1
else:
a = df.iloc[i]['net_mf_amount'] - df.iloc[i-1]['net_mf_amount']
b = None
a_column.append(a)
b_column.append(b)
else:
a_column.append(None)
b_column.append(None)
# 将结果保存到数据库
cursor.execute("ALTER TABLE " + table_name_quoted + " ADD COLUMN a DECIMAL(10,2)")
cursor.execute("ALTER TABLE " + table_name_quoted + " ADD COLUMN b DECIMAL(10,2)")
for i in range(len(df)):
cursor.execute("UPDATE " + table_name_quoted + " SET a=%s, b=%s WHERE trade_date=%s", (a_column[i], b_column[i], df.iloc[i]['trade_date']))
conn.commit()
# 关闭连接
cursor.close()
conn.close()
```
请注意,这只是一个示例代码,具体实现可能因数据库类型和表格结构而异。因此,你需要根据实际情况进行修改和调整。