sql >> Databáze >  >> RDS >> PostgreSQL

psycopg2 cursor.execute() s parametrem dotazu SQL způsobí chybu syntaxe

Věřím, že parametrizované příkazy, jako je tento, jsou určeny k použití s ​​hodnotami a ne názvy tabulek (nebo klíčová slova SQL atd.). Takže v tomhle máte v podstatě smůlu.

Nemějte však obavy, protože tento mechanismus má zabránit vkládání SQL a běžně víte, ke které tabulce chcete přistupovat v době psaní kódu, takže je malá šance, že by někdo mohl vložit škodlivý kód. Pokračujte a napište tabulku do řetězce.

Pokud z nějakého (možná zvráceného) důvodu ponecháte název tabulky parametrický takto:

  1. Pokud název tabulky pochází z vašeho programu (např. slovník nebo atribut třídy), proveďte obvyklou náhradu řetězce.
  2. Pokud název tabulky pochází z vnějšího světa (předpokládejte „vstup uživatele“):buď to nedělejte, nebo uživateli zcela důvěřujte a použijte předchozí přístup 1.

Například:

cursor.execute(
    'SELECT * FROM %s where %s = %s'
    % ("my_table", "colum_name", "%s"), #1
    ("'some;perverse'string;--drop table foobar")) #2

#1 :Nechte nyní třetí %s nahradit jiným '%s', aby bylo možné později zpracování pomocí psycopg2#2 :Toto je řetězec, který bude správně citován psycopg2 a umístěn místo třetího '%s' v původním řetězci



  1. Jak importovat soubor .bak SQL Serveru do MySQL?

  2. Počítání nulových hodnot jako jedinečné hodnoty

  3. Vždy zobrazovat desetinná místa v SQL?

  4. vybrat z tabulky mysql záznamy, které patří k dnešku