python - 如何让循环更有效率

标签 python mysql

我开发的代码如下。我有一个名为 asx_codes 的 SQL 表,其中包含股票和股票分配到的 GICS 行业的代码。每个 GICS 行业在 MySQL 数据库中都有自己的表。我目前正在调整下面的代码来执行增量更新。我想要拥有它,这样我就不必重复 ELIF 语句 25 次。我尝试过使用另一个表并再次执行循环,但这效果不太好。我还希望它将来能够从更新的 MySQL 表中获取新的代码等。

from sqlalchemy import create_engine
import pymysql
import datetime
import pandas_datareader.data as web
import pandas as pd
import warnings; warnings.simplefilter('ignore')
sqlEngine = create_engine('mysql+pymysql://root:root@localhost/stocks', pool_recycle=3600)
dbConnection = sqlEngine.connect()

query = "SELECT * FROM asx_codes"
base_df = pd.read_sql(query, dbConnection)

for index, row in base_df.iterrows():
    stock = row[1]+".AX"
    category = row[2]
    if row[2] == 'banks':
        try:
            tableName = 'banks'
            df = web.DataReader(stock, 'yahoo')
            df['stock'] =row[1]
            df.reset_index(level=0, inplace=True)
            del df['Adj Close']
            frame = df.to_sql(tableName, dbConnection, if_exists='append', index = False)
            print(row[1] +" Downloaded")
        except:
            print("No Code for" + row[1])
    elif ... DO THE SAME AS ABOVE BUT FOR A DIFFERENT VALUE OF row[2]. row[2] if the industry code.

最佳答案

如果 if 语句中唯一更改的部分是表名,则可以使用函数:

from sqlalchemy import create_engine
import pymysql
import datetime
import pandas_datareader.data as web
import pandas as pd
import warnings; warnings.simplefilter('ignore')

def update(row, base_df, dbConnection):
    try:
        stock = row[1]+".AX"
        category = row[2]
        tableName = category
        df = web.DataReader(stock, 'yahoo')
        df['stock'] =row[1]
        df.reset_index(level=0, inplace=True)
        del df['Adj Close']
        frame = df.to_sql(tableName, dbConnection, if_exists='append', index = False)
        print(row[1] +" Downloaded")
    except:
        print("No Code for" + row[1])

sqlEngine = create_engine('mysql+pymysql://root:root@localhost/stocks', pool_recycle=3600)
dbConnection = sqlEngine.connect()

query = "SELECT * FROM asx_codes"
base_df = pd.read_sql(query, dbConnection)

for index, row in base_df.iterrows():
    update(row, base_df, dbConnection)

根据您需要更新的功能可能会发生变化

关于python - 如何让循环更有效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57855731/

相关文章:

mysql - 加入 mysql 表并获取多行

python - 更新线程内的pyqtgraph BarGraphItem

Python3 帮助确定动态创建列表的大多数 pythonic 方法

php - 用php标记MySql中的重复项(不删除)

mysql - 触发器不适用于长文本字段

java - 更新我的项目时遇到问题,图像 BLOB 格式 [JAVA]

python - 如何为列表的每个元素分配不同的变量

python - 如何在 Python 或 R 中获取用于选择主成分数量的 BIC/AIC 图

python - 重复 Pandas 数据框行标签

php - Laravel .env 文件返回错误数据