我想从dataframe(rtrend
)columnmydata1
更新MySQL表(pandas
)中的columngetdata1
,确保这些值对应于适当的日期(rtrend
)
例如,df的dt
值更新相应的MySQLrtrend
2016-08-09
getdata1
mydata1
值。
此外,在本例中还指定了一个特定的安全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()来将数据类型与表匹配。