我想以自己的格式将SQL保存到YAML文件,如下所示:
(1)
sql: SELECT DISTINCT p.id_product,
p.price AS price,
sp.reduction AS discount
FROM ....
我使用以下YAML设置
yaml.safe_dump(app_config,
stream,
indent=4,
default_flow_style=False,
encoding='utf-8',
allow_unicode=True)
但是我得到了YAML的“经典”丑陋输出
(2)
sql: SELECT DISTINCT p.id_product, p.price AS price, sp.reduction AS discount, sp.reduction_type
AS discount_type, pl.description_short AS description FROM ....
有什么办法可以实现输出#1?
PS。repr(config)等于:
{'mapping': {'/*ID_LANG*/': 'AND pl.id_lang IN (/*VALUE*/)', '/*REFERENCE*/': "AND p.reference LIKE '%/*VALUE*/%'", }, 'sql': 'SELECT DISTINCT p.id_product, p.price AS price, sp.reduction AS discount, sp.reduction_type AS discount_type, pl.description_short AS description, pl.name AS name, i.id_image as image, p.reference AS model, m.name AS manufacturer, pl.available_now AS stock_status FROM /*PREFIX*/product p LEFT JOIN /*PREFIX*/product_lang pl ON (p.id_product = pl.id_product) LEFT JOIN /*PREFIX*/manufacturer m ON (m.id_manufacturer = p.id_manufacturer) LEFT JOIN /*PREFIX*/image i ON (i.id_product = p.id_product) LEFT JOIN /*PREFIX*/specific_price sp ON (sp.id_product = p.id_product) LEFT JOIN /*PREFIX*/category pc ON p.id_category_default = pc.id_category WHERE i.cover = 1 /*WHERE*/'}
如果您的输入格式是一些未格式化的SQL(没有换行符和缩进空格),就像您似乎从输出(2)中 获取的那样,您将 永远不会 自动获得良好的输出:
import yaml
sql = ("SELECT DISTINCT p.id_product, "
"p.price AS price, "
"sp.reduction AS discount, "
"sp.reduction_type AS discount_type, "
"pl.description_short AS description "
"FROM ....")
app_config = dict(sql=sql)
print yaml.dump(app_config)
会给你:
{sql: 'SELECT DISTINCT p.id_product, p.price AS price, sp.reduction AS discount, sp.reduction_type
AS discount_type, pl.description_short AS description FROM ....'}
如您所知。您可以尝试使用换行符和缩进来对字符串进行手工格式化
app_config = dict(sql="""\
SELECT DISTINCT p.id_product,
p.price AS price,
sp.reduction AS discount,
sp.reduction_type AS discount_type,
pl.description_short AS description
FROM ....""")
print yaml.dump(app_config)
但是输出并不好:
{sql: "SELECT DISTINCT p.id_product,\n p.price AS price,\n \
\ sp.reduction AS discount,\n sp.reduction_type AS discount_type,\n\
\ pl.description_short AS description\n FROM ...."}
我建议您采用其他方法,并结合ruamel.yaml(我是PyYAML增强版的作者)安装sqlparse或format-
sql之
类的sql格式化程序,该格式程序支持多行文字字符串往返。在一点帮助下,它也可以用于生成正确且更好(如果不是更好)的YAML输出。
你可以做:
import ruamel.yaml
from ruamel.yaml.scalarstring import PreservedScalarString
import sqlparse
sql = ("SELECT DISTINCT p.id_product, "
"p.price AS price, "
"sp.reduction AS discount, "
"sp.reduction_type AS discount_type, "
"pl.description_short AS description "
"FROM ....")
fsql = sqlparse.format(sql, reindent=True, keyword_case="upper").encode('utf-8')
app_config = dict(sql=PreservedScalarString(fsql))
print ruamel.yaml.dump(app_config, Dumper=ruamel.yaml.RoundTripDumper)
并获得带有保留的换行符的YAML文字标量:
sql: |-
SELECT DISTINCT p.id_product,
p.price AS price,
sp.reduction AS discount,
sp.reduction_type AS discount_type,
pl.description_short AS description
FROM ....
希望距离您想要的足够近。
我反复使用表单和保存页面将用户的答案保存到我的sql数据库中。最初,我将答案保存到一个数组中,一旦达到目标,我使用一个循环将数组的所有值传递到数据库,更新页面的代码如下所示: 这段代码运行得很好,但我需要立即保存所有答案,而不是在达到目标时保存。因此,我将代码更改为以下内容: 当问题出现时,新条目总是保存在新旧数据之间的同一位置。例如,如果在更改之前我保存了5个条目,它们在sql数组中的顺序如下:
问题内容: 我有一个熊猫DataFrame,我想上传到新的CSV文件。问题是在将文件传输到s3之前,我不想在本地保存文件。是否有像to_csv这样的方法可以将数据帧直接写入s3?我正在使用boto3。 这是我到目前为止的内容: 问题答案: 您可以使用:
问题内容: 我有一个要保存到UserDefaults的结构。这是我的结构 在另一个ViewController中,我有一个UIButton附加到此结构,例如 我想要它,以便每当用户单击该按钮时,它也将结构保存到UserDefaults,以便每当用户退出该应用程序然后将其打开时,它都会被保存。我该怎么做? 问题答案: 在Swift 4中,这几乎是微不足道的。只需将其标记为采用Codable协议,即可
我最近在学习如何阅读
问题内容: 上面的语句将生成以下警报: 消息6819,级别16,状态3,第2 行在ASSIGNMENT语句中不允许使用FOR XML子句。 问题答案: 例如 请参阅:http : //blogs.msdn.com/sqlprogrammability/articles/576095.aspx
问题内容: 我在SQL Server 2000中有一个带有图像列的表。我需要将图像数据保存到文件系统上的文件中。在SQL Server 2005中,我可以将ADODB.Stream对象用于文件I / O,但在SQL Server 2000中似乎不存在。我能找到的最接近的东西是Scripting.FileSystemObject,但它似乎仅支持文本文件。这对我不起作用(我不认为)。 问题答案: AD