Python SQL Alchemy更新多个WHERE条件
我想从数据帧(Python SQL Alchemy更新多个WHERE条件,python,mysql,pandas,sqlalchemy,sql-update,Python,Mysql,Pandas,Sqlalchemy,Sql Update,我想从数据帧(getdata1)列rtrend更新MySQL表(mydata1)中的列rtrend),确保值对应于适当的日期(dt) e、 g.rtrend2016-08-09的值fromgetdata1df更新相应的MySQLmydata12016-08-09rtrend值 此外,在这种情况下,还需要指定特定的安全id,例如security\u id==“GS” updateexample = update(mydata1) .where(mydata1.c.security_id
getdata1
)列rtrend
更新MySQL表(mydata1
)中的列rtrend
),确保值对应于适当的日期(dt
)
e、 g.rtrend
2016-08-09的值fromgetdata1
df更新相应的MySQLmydata1
2016-08-09
rtrend
值
此外,在这种情况下,还需要指定特定的安全id,例如security\u id==“GS”
updateexample = update(mydata1)
.where(mydata1.c.security_id=='GS', mydata1.c.dt==getdata1['dt'])
.values(rtrend=getdata1['rtrend'])
这会产生AttributeError:'Series'对象没有属性“translate”
请有人帮我找到正确的方法
当前表和数据帧的示例:
熊猫数据帧“getdata1”
dt | security_id | rtrend
2016-08-09 | GS | 1
2016-08-10 | GS | -1
dt | security_id | rtrend
2016-08-09 | GS | NULL
2016-08-10 | GS | NULL
MySQL表“mydata1”
dt | security_id | rtrend
2016-08-09 | GS | 1
2016-08-10 | GS | -1
dt | security_id | rtrend
2016-08-09 | GS | NULL
2016-08-10 | GS | NULL
下面是我使用上述指导的解决方案
然后循环定义每个值并更新表
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()只是为了将数据类型与我的表匹配 阅读有关批量更新的信息。其思想是bindparam
要更新的字段,并将一个iterable馈送到。执行
。getdata1
的输出可能直接可用。(我希望您只是为了举例而重命名了所有对象,并在实际代码中使用描述性名称。)谢谢Stefano。是的,为了这个例子,刚刚重命名了对象