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

parameters substitution from one .py file to another .py file

我有一个包含所有参数值的参数文件。我想将这些值传递给另一个 .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 对象属性的信息存储在对象名称 space(它的 __dict__)中。默认情况下,空模块具有以下属性:

  • __builtins__
  • __file__
  • __name__
  • __doc__

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

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

也许试试这样的东西?而是 return 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()