Sqlalchemy 核心 - 动态 SQL 查询和转义值

enf*_*644 4 python sqlalchemy python-2.7 flask-sqlalchemy

I\xe2\x80\x99m 创建动态插入查询。

\n\n
    sql = "INSERT INTO `" + self.db_name + "` ("\n    sql += \',\'.join(e.db_name for e in self.fields)\n    sql += ") VALUES ("\n    sql += \',\'.join(("\'" + e.value + "\'") for e in self.fields)\n    sql += ");"\n    result = s.execute(sql)\n
Run Code Online (Sandbox Code Playgroud)\n\n

它工作得很好,只是插入的值对于特殊字符和 SQL 注入不安全。

\n\n

我无法使用 SqlAlchemy text()机制,因为我不知道表中字段的名称或数量。

\n\n

我尝试了MySQLdb.escape_string(),但它不适用于 Unicode。

\n\n

如何在转义 unicode 值中的特殊字符的同时进行动态 sql 插入查询?

\n

enf*_*644 5

四年前我想听到的答案——

sql = 'INSERT INTO some_table (guid, name) VALUES (:guid_val, :name_val)'

db_session.execute(sql, {
  "guid_val": uuid.uuid4(),
  "name_val": "Hello world"
})
Run Code Online (Sandbox Code Playgroud)