5

我正在使用 cx_Oracle 来访问我们的数据库。我希望用户能够输入站 ID,例如:

stationID=(用户在提示时输入的内容)

cursor.execute('''select cruise, station, stratum
          from union_fscs_svsta
          where station=stationID
          order by cruise''')

因为语句需要是字符串,如何合并用户定义的变量?

4

1 回答 1

9

如何这样做:

id = raw_input("Enter the Station ID")
query = "select foo from bar where station={station_id}"
cursor.execute(query.format(station_id=id))

如果有人输入了恶意的 sql 字符串,就会被执行。

不要使用 python 来格式化字符串,而是让数据库后端为您处理它。具体如何执行此操作取决于您使用的数据库。我认为(?)这对 Oracle 来说是正确的,但我无法对其进行测试。一些数据库使用不同的字符(例如?,而不是%s在 SQLite 的情况下)。

id = raw_input("Enter the Station ID")
query = "select foo from bar where station=%s"
cursor.execute(query, [id])

编辑:显然,cx_Oracle默认为“命名”参数样式(您可以通过查看来检查cx_Oracle.paramstyle。)。在这种情况下,你会做这样的事情:

query = "select foo from bar where station=:station_id"
cursor.execute(query, station_id=id)
于 2012-11-30T18:53:39.700 回答