python - есть ли разумный способ форматирования строк с цитатами? - PullRequest
0 голосов
/ 21 февраля 2019

Я использую neo4j python lib для управления базой данных графа neo4j.

Мне нужно отформатировать запрос шифрования как

query = 'create (n:Person {{nickname: "{0}"}}) return n;'.format(nickname)

Если псевдоним содержит "сам по себе, как A"B, сгенерированный запрос будет

create (n:Person {nickname: "A"B"}) return n;, что вызовет синтаксическую ошибку при запуске cql.

На самом деле язык запросов шифрования поддерживает '' и ""чтобы указать строку.

Так что моя проблема в том, что, если есть разумный способ, когда переменная псевдоним содержит ' или ", форматированная строка может автоматически использовать правильные кавычки?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать функцию repr для форматирования строки с правильными кавычками:

query = 'create (n:Person {{nickname: {0}}}) return n;'.format(repr(nickname))

, поскольку ее поведение соответствует желаемому, заключая данную строку в двойные кавычки, когда строка содержитодинарные и одинарные кавычки, если строка содержит двойные кавычки:

>>> print(repr("A'B"))
"A'B"
>>> print(repr('A"B'))
'A"B'
0 голосов
/ 21 февраля 2019

То, что вам нужно, называется "экранирование кавычек".Самый простой способ сделать это:

nickname='A"B'
query = 'create (n:Person {{nickname: "{0}"}}) return n;'.format(nickname.replace('"','\\"'))
print(query)

>>> 
create (n:Person {nickname: "A\"B"}) return n;

Если вы хотите более «формальный» способ, вы можете сделать следующее:

import json
person = {'nickname': 'A"B'}
query = 'create (n:Person {0}) return n;'.format(json.dumps(person))
print(query)
0 голосов
/ 21 февраля 2019

Вы можете использовать строку формата """Lorem ipsum""", которая позволяет использовать символы и символы ascii.т.е.

query = """create (n:Person {{nickname: "{0}"}}) return n;""".format(nickname)

Вы также можете использовать одинарные кавычки и двойные кавычки в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...