'CREATE' in Python String 导致 KeyError with " 'class' "
'CREATE' in Python String causing KeyError with " 'class' "
我正在尝试使用 "Python-Driver" 为 Cassandra(NoSQL 数据库)制作一个 class 命令。您可以在数据库上使用 session.execute()
到 运行 SQL 命令。无论如何,我正在尝试创建一个函数来创建一个键空间。
代码如下:
def createKeySpace(self, title, class_type='SimpleStrategy', replication_factor='3'):
self.session.execute("CREATE KEYSPACE {} WITH REPLICATION = \
{ 'class' : '{}', 'replication_factor' : {} };\
".format(title, class_type, replication_factor))
问题是,如果我尝试使用此功能,我会收到错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "db_commands.py", line 12, in createKeySpace
".format('CREATE', title, class_type, replication_factor))
KeyError: " 'class' "
我认为值得注意的一点:
我注意到我在 Sublime Text 中的字符串中的 =
符号是红色的,而通常的字符串颜色是黄色的。 如果我从字符串中取出 "CREATE",等号将 return 变为黄色!
这是因为 Python 已经将 CREATE 识别为 SQL 语法并且不喜欢我用 .format() 声明字符串的方式吗?任何帮助都会很棒! :)
使用 format
时,您需要转义花括号,这些花括号本来就是文字花括号,例如
"CREATE {} WITH REPLICATION = \
{{ 'class' : '{}', 'replication_factor' : {} }};".format('a','b','c')
您的 string.format 语法有误 - 您只是尝试按照您的方式格式化该字符串时遇到同样的错误..
title="Title"
class_type="Class_Type"
replication_factor="Rep_Factor"
print("CREATE KEYSPACE {} WITH REPLICATION = { 'class' : '{}', 'replication_factor' : {} };".format(title, class_type, replication_factor))
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: " 'class' "
问题是您需要将 {
和 }
文字加倍才能正常工作。
print("CREATE KEYSPACE {} WITH REPLICATION = \
{{ 'class' : '{}', 'replication_factor' : {} }};\
".format(title, class_type, replication_factor))
CREATE KEYSPACE Title WITH REPLICATION = { 'class' : 'Class_Type', 'replication_factor' : Rep_Factor };
查看 How can I print literal curly-brace characters in python string and also use .format on it? 了解更多详情。
使用这个
"CREATE KEYSPACE {} WITH REPLICATION={{ 'class' : '{}', 'replication_factor' : {}}};".format(keyspace,'SimpleStrategy',1)
您需要转义本来就是字面花括号的花括号,因此请再使用一个花括号来转义它们,如上所示。
我正在尝试使用 "Python-Driver" 为 Cassandra(NoSQL 数据库)制作一个 class 命令。您可以在数据库上使用 session.execute()
到 运行 SQL 命令。无论如何,我正在尝试创建一个函数来创建一个键空间。
代码如下:
def createKeySpace(self, title, class_type='SimpleStrategy', replication_factor='3'):
self.session.execute("CREATE KEYSPACE {} WITH REPLICATION = \
{ 'class' : '{}', 'replication_factor' : {} };\
".format(title, class_type, replication_factor))
问题是,如果我尝试使用此功能,我会收到错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "db_commands.py", line 12, in createKeySpace
".format('CREATE', title, class_type, replication_factor))
KeyError: " 'class' "
我认为值得注意的一点:
我注意到我在 Sublime Text 中的字符串中的 =
符号是红色的,而通常的字符串颜色是黄色的。 如果我从字符串中取出 "CREATE",等号将 return 变为黄色!
这是因为 Python 已经将 CREATE 识别为 SQL 语法并且不喜欢我用 .format() 声明字符串的方式吗?任何帮助都会很棒! :)
使用 format
时,您需要转义花括号,这些花括号本来就是文字花括号,例如
"CREATE {} WITH REPLICATION = \
{{ 'class' : '{}', 'replication_factor' : {} }};".format('a','b','c')
您的 string.format 语法有误 - 您只是尝试按照您的方式格式化该字符串时遇到同样的错误..
title="Title"
class_type="Class_Type"
replication_factor="Rep_Factor"
print("CREATE KEYSPACE {} WITH REPLICATION = { 'class' : '{}', 'replication_factor' : {} };".format(title, class_type, replication_factor))
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: " 'class' "
问题是您需要将 {
和 }
文字加倍才能正常工作。
print("CREATE KEYSPACE {} WITH REPLICATION = \
{{ 'class' : '{}', 'replication_factor' : {} }};\
".format(title, class_type, replication_factor))
CREATE KEYSPACE Title WITH REPLICATION = { 'class' : 'Class_Type', 'replication_factor' : Rep_Factor };
查看 How can I print literal curly-brace characters in python string and also use .format on it? 了解更多详情。
使用这个
"CREATE KEYSPACE {} WITH REPLICATION={{ 'class' : '{}', 'replication_factor' : {}}};".format(keyspace,'SimpleStrategy',1)
您需要转义本来就是字面花括号的花括号,因此请再使用一个花括号来转义它们,如上所示。