从一个 .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()
我有一个包含所有参数值的参数文件。我想将这些值传递给另一个 .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()