0

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

参数.py 文件

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

原始sql.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 文件中的变量变电站

4

2 回答 2

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 对象属性的信息存储在对象名称空间 (its __dict__) 中。默认情况下,空模块具有以下属性:

  • __builtins__
  • __file__
  • __name__
  • __doc__

由于条件,这些特殊属性被搁置一旁(if '__' not in k)

于 2016-06-14T20:58:07.023 回答
0

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

参数.py 文件

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

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

原始sql.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()      
于 2016-06-14T21:20:19.013 回答