sql >> Databáze >  >> RDS >> Mysql

('SQL obsahuje 0 značek parametrů, ale bylo dodáno 50 parametrů', 'HY000') nebo TypeError:objekt 'tuple' nelze volat

Metoda executemany(sql, seq_of_parameters) provede stejný příkaz SQL několikrát pro sadu parametrů. Proto druhý argument, seq_of_parameters , musí být posloupnost n-tic parametrů, nikoli pouze n-tice s jedním parametrem:

cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])

Pokud předáte pouze jednu n-tici, kurzor bude předpokládat, že první položka, x[a] , je n-tice parametrů. Myslím, že je to řetězec 50 znaků a je interpretován jako sekvence 50 parametrů, zatímco řetězec SQL očekává pouze 2.

Dále si všimněte, že jsem použil ? jako zástupný symbol namísto %s , protože se zdá, že PyODBC nepodporuje PyODBC, protože hlásil, že očekával 0 parametrů.

Ve vašem případě možná budete chtít použít execute() metodu ve smyčce, protože chcete příkaz spustit pouze jednou za iteraci:

cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))



  1. Liquibase - kontrolní součet se liší u různých dodavatelů databází

  2. Pochopení SUM(NULL) v MySQL

  3. MySQL index zpomaluje dotaz

  4. Jak sloučit 2 sady výsledků s opačným pořadím v MySQL