我想从dataframe(rtrend)columnmydata1更新MySQL表(pandas)中的columngetdata1,确保这些值对应于适当的日期(rtrend
例如,df的dt值更新相应的MySQLrtrend2016-08-09getdata1mydata1值。
此外,在本例中还指定了一个特定的安全id,例如2016-08-09

updateexample = update(mydata1)
      .where(mydata1.c.security_id=='GS', mydata1.c.dt==getdata1['dt'])
      .values(rtrend=getdata1['rtrend'])

这会产生rtrend请有人能帮我找到正确的方法来解决这个问题吗?
当前表和数据帧示例:
熊猫数据框“getdata1”
dt         | security_id | rtrend
2016-08-09 | GS          | 1
2016-08-10 | GS          | -1

MySQL表'mydata1'
dt         | security_id | rtrend
2016-08-09 | GS          | NULL
2016-08-10 | GS          | NULL

最佳答案

以下是我使用上述指导的解决方案
http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.bindparam

updatecode1 = update(mydata1).
    where(and_(mydata1.c.dt == bindparam('1dt'), mydata1.c.security_id == bindparam('1security_id')) ).
    values({'rtrend' : bindparam('1rtrend'),'ma200' : bindparam('1ma200')})

然后循环定义每个值并更新表
b1 = 'GS'

i = 0

for i in range(len(getdata1)):
    a1 = getdata1.iloc[i]['dt']
    c1 = int(getdata1.iloc[i]['rtrend'])
    d1 = float(getdata1.iloc[i]['MA200'])

    conn.execute(updatecode1, {'1dt' : a1, '1security_id' : b1, '1rtrend' : c1, '1ma200' : d1})

我相信有一种比这种方式循环更有效的方法,但这解决了我的问题。
注意:在上面的“c1”和“d1”中,我只使用了int()和float()来将数据类型与表匹配。

10-06 16:11