12

SQL 錬金術で Text オブジェクトを利用したパラメーター化されたクエリを使用していますが、異なる結果が得られています。

作業例:

import sqlalchemy as sqlal
from sqlalchemy.sql import text

    db_table = 'Cars'
    id_cars = 8
    query = text("""SELECT * 
                    FROM Cars 
                    WHERE idCars = :p2
                 """)
    self.engine.execute(query, {'p2': id_cars})

sqlalchemy.exc.ProgrammingErrorを生成する例: ( pymysql.err.ProgrammingError ) (1064、"SQL 構文にエラーがあります)

import sqlalchemy as sqlal
from sqlalchemy.sql import text

    db_table = 'Cars'
    id_cars = 8
    query = text("""SELECT * 
                    FROM :p1 
                    WHERE idCars = :p2
                 """)
    self.engine.execute(query, {'p1': db_table, 'p2': id_cars})

SQLインジェクションからも保護されている動的テーブル名でクエリを実行する方法について何か考えはありますか?

4

2 に答える 2