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



我有一个包含所有参数值的参数文件。 我想将这些值传递给另一个.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文件中的可变变电站

以下代码片段将为您提供需要做什么的想法:

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),这些特殊属性被搁置一旁

也许尝试这样的事情?而是返回 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()      

相关内容

  • 没有找到相关文章

最新更新