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的值
from
getdata1
df更新相应的MySQL
mydata1
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。是的,为了这个例子,刚刚重命名了对象