参数从一个.py文件替换到另一个.py文件

时间:2016-06-14 20:42:55

标签: python input substitution parameterization

我有一个包含所有参数值的参数文件。我想将这些值传递给另一个.py(原始sql文件)并生成可执行的sql文件 这是我到目前为止所拥有的

params.py文件

var1 = '1,2,3'
var2 = '('abc', 'cde', 'xyz')'

rawsql.py

import params

select *
from emp.ids
where ids in var1
and names in var2

我期望的输出是.sql文件

exec_sql_file.sql

select *
from emp.ids
where ids in (1,2,3) and 
and names in ('abc','code','xyz')

如何从另一个.py文件中完成.py文件中的变量变电站

2 个答案:

答案 0 :(得分:0)

以下代码段将为您提供并了解您需要执行的操作:

import params
# filter non built-in variable names
variables = [k for k in params.__dict__ if '__' not in k]

with open('rawsql.sql', 'r') as f:
    content = f.read()

for v in variables:
    content = content.replace(v, getattr(params, v))
with open('exec_sql_file.sql', 'w') as f:
    f.write(content)

当然这不是防弹的,可以根据字符串格式进行改进以满足您的需求。我还应该强调,这样做会让你打开SQL注入,你应该选择基于sqlalchemy的解决方案或者特定于服务器的其他库。

编辑:

python模块是一个对象,在这样的模块中定义的每个变量都是一个属性。有关python对象属性的信息存储在对象名称空间(其__dict__)中。默认情况下,空模块具有以下属性:

  • __builtins__
  • __file__
  • __name__
  • __doc__

由于条件(if '__' not in k)

,这些特殊属性被搁置一旁

答案 1 :(得分:0)

也许尝试这样的事情?而是将sql写入文件。

params.py文件

def var1():
   return = '1,2,3'

def var2():
   return  '('abc', 'cde', 'xyz')'

rawsql.py

import params

def sqlCont():

  return "select * from emp.ids  where ids in '%s' and names in '%s' "   % (params.var1, params.var2 )

if __name__ == '__main__':
  sqlCont()