如何解析包含在字符串中的变量代码,就好像它是python脚本的一部分一样

时间:2016-06-21 21:56:24

标签: python string variables eval

根本问题是如何将存储的内容(其他/早期)作为包含未翻译变量的字符串并强制python重新评估它,以便在字符串中写入的变量可以转换为它们的 - 已知值。

我有一个定义类似的变量(可能有多个版本的变量):

src_check = "SELECT daily_installs FROM mr_app WHERE report_date = '\" + row[0] + \"' AND country = '\" + row[3] + \"'"

我正在使用\“因为在那一刻,行的变量是未知的。但是,我无法弄清楚如何将它转换回文字代码,以后,以便我可以做这样的事情(在定义了所需的变量之后):

cursor.execute(code_version_of_src_check)

我试过了:

cursor.execute(src_check.replace("\"",""))

但它不会将行作为变量处理。

这是我一直遇到的问题的一个例子,并没有找到一个好的解决方案。再举一个例子,初始变量字符串将从数据库表中提取,可能类似于:

"/partitions/" + dateToCheck.strftime('%Y-%m-%d/')

这需要转换为类似“/ partitions / 2016-06-21 /”的内容,其中dateToCheck是在从DB中提取的Python脚本中定义的。此特定示例适用于监视器。有数百行,它们在此数据字段中有各种变量,与日期相关的变量值不断变化。

我也试过使用eval(),但是无法让它工作,当每个人只是说“不要使用它”时,很难找到它的例子,原因是这里不适用(没有外部输入/用户参与)。

(使用Python 2.7.6)

2 个答案:

答案 0 :(得分:0)

这就是函数的用途。

def get_src_check(row):
  return "SELECT daily_installs FROM mr_app WHERE report_date = '" + row[0] + "' AND country = '" + row[3] + "'"

....

row = ...
cursor.execute(get_src_check(row))

答案 1 :(得分:0)

您可以使用字符串变量运行cursor.execute。

来自django.db导入连接

cursor = connection.cursor()

src_check = str(" SELECT daily_installs FROM mr_app WHERE report_date ='" + row [0] +"' AND country ='&#34 ; + row [3] +"'")

cursor.execute(src_check)

row = cursor.fetchone()

您可以在此处找到好的示例:https://docs.djangoproject.com/en/1.9/topics/db/sql/