' CREATE'在Python String中导致KeyError与" '类' "

时间:2015-08-02 21:09:37

标签: python cassandra keyerror nosql

我正在尝试使用" Python-Driver"为Cassandra(一个NoSQL数据库)创建一类命令。您可以使用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中我的字符串中的=符号是红色,而通常的String颜色是黄色。 如果我拿出&#34; CREATE&#34;但是,从字符串开始,等号将返回黄色!

这是因为Python已经将CREATE识别为SQL语法并且不喜欢我用.format()声明字符串的方式吗?任何帮助都会很棒! :)

3 个答案:

答案 0 :(得分:6)

使用format时,你需要逃避花括号的大括号,例如。

"CREATE {} WITH REPLICATION = \
    {{ 'class' : '{}', 'replication_factor' : {}  }};".format('a','b','c')

答案 1 :(得分:3)

你的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?了解详情。

答案 2 :(得分:0)

使用此

"CREATE KEYSPACE {} WITH REPLICATION={{ 'class' : '{}', 'replication_factor' : {}}};".format(keyspace,'SimpleStrategy',1)

您需要转义大写的花括号,因此请使用一个以上的大括号将其转义。