在daily数据库遍历所有表格,表格有特殊字符,需要加反引号,对于每个表格 查询net_mf_amount列的数据,按照trade_date降序排列 对查询结果进行pandas计算,a和b列均已存在,不需要判断,对net_mf_amount列的前一天的数据减去今天的数据放在a列, 将a列的值前一天的数据减去今天的数据放在b列,如果a和b之前计算过,则跳过计算下一个值 保存a和b列的值 继续处理下一个表格,直到处理完所有表格
时间: 2024-02-09 09:12:20 浏览: 126
好的,你需要遍历daily数据库中所有表格,对于每个表格查询net_mf_amount列的数据,按照trade_date降序排列。对于查询结果,你需要进行pandas计算,计算过程中需要判断表格中是否已经存在a和b列,如果存在,则跳过计算下一个值。最后,你需要保存a和b列的值,并继续处理下一个表格,直到处理完所有表格。下面是实现这个功能的代码示例:
```python
import pandas as pd
import pymysql
# 建立连接
daily_conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='daily')
# 获取表格列表
cursor = daily_conn.cursor()
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
# 遍历所有表格
for table in tables:
table_name = table[0]
# 处理表格名中的特殊字符
if '`' not in table_name:
table_name = f"`{table_name}`"
sql = f"SELECT net_mf_amount, trade_date FROM {table_name} ORDER BY trade_date DESC"
cursor = daily_conn.cursor()
cursor.execute(sql)
data = cursor.fetchall()
df = pd.DataFrame(list(data), columns=['net_mf_amount', 'trade_date'])
# 对查询结果进行pandas计算
if 'a' not in df.columns and 'b' not in df.columns:
df['a'] = df['net_mf_amount'].shift(1) - df['net_mf_amount']
df['b'] = df['a'].shift(1) - df['a']
else:
continue
# 保存a和b列的值
cursor = daily_conn.cursor()
try:
cursor.execute(f"ALTER TABLE {table_name} ADD COLUMN a FLOAT")
cursor.execute(f"ALTER TABLE {table_name} ADD COLUMN b FLOAT")
except:
pass
for index, row in df.iterrows():
a_value = row['a']
b_value = row['b']
trade_date = row['trade_date']
cursor.execute(f"UPDATE {table_name} SET a = {a_value}, b = {b_value} WHERE trade_date = '{trade_date}'")
daily_conn.commit()
# 关闭连接
cursor.close()
daily_conn.close()
```
这段代码首先连接daily数据库,然后获取表格列表,对于每个表格,它会查询net_mf_amount列的数据,按照trade_date降序排列。接着,它会对查询结果进行pandas计算,如果表格中不存在a和b列,则进行计算,否则跳过计算下一个值。最后,它会保存a和b列的值,并继续处理下一个表格,直到处理完所有表格。需要注意的是,在处理表格名中的特殊字符时,需要在表格名的前后加上反引号。
阅读全文