python sql语句不放在python脚本中_在属性文件中存储SQL语句以供Python脚本使用?...

2个选项。在

配置解析器

我将使用旧的INI/ConfigParser格式。以前经常使用它们,但现在更倾向于json,只是json对于sql来说不是很好。在

这是Pythonimport ConfigParser

cfp = ConfigParser.ConfigParser()

cfp.read("test_so08.ini")

myselect = cfp.get("sql", "select", raw=True)

for line in myselect.split("\n"):

print ":%s:" % (line)

还有ini。请注意,您需要在select=之后的每一行中至少缩进一个空白,否则configparser将尝试解析其他行,而不是使用select将它们分组。在

^{pr2}$

打印出来::select *:

:from customers:

:where custid = %(custid)s:

优点:它不是一个代码文件,所以理论上你可以让任何人配置sql。理论上。在

缺点:基于ini的sql在获取变量方面有相当大的开销,而且当你想添加更多的特性时,你会做很多的变通。在

模块中的普通旧三元组字符串变量

另一种选择是只使用Python模块并使用三重引号字符串。我倾向于把它用于sql,而不是ini。在

优点:简单。

缺点:只有Python和无效的语法错误会停止调用脚本。在say this is sql_test_so08.py

select = """

select *

from customers

where custid = %(custid)s

"""

select2 = """"""

在你的剧本中:import sql_test_so08

print sql_test_so08.select

一个优点是,我可以使用Template/$var替换来替换从其他地方导入的应用程序常量,而不是在sql中硬编码它们。假设您将一个无效的“客户”未付款标志设置为3。在

在sql.py您想要的文件:from constants import invalid_customer_unpaid

di_constants = dict(invalid_customer_unpaid=invalid_customer_unpaid)

select_bad="""select... where ... $invalid_customer_unpaid"""

select_bad = Template(select_bad).substitute(di_constants)

注意:我很少使用直接变量替换,如下所示。SQL注入的风险太大。但是您可以使用RDBMS的绑定参数支持应用相同的思想。在

编辑:

现在做了很多山药。

-JSON用于机器写入和机器读取。

-YAML用于手写、机器读取,因为它在支持引号和格式方面比JSON要好得多。在

给予测试.yaml:sql:

select: select * from customers where custid = %(custid)s

text: 'some text with ''abc'' and "xyz" '

那么from yaml import safe_load as yload

with open("test.yaml") as fi:

di2 = yload(fi)

print (di2["sql"]["select"])

将输出:select * from customers where custid = %(custid)s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值