【问题标题】:Remove newline characters from Cassandra query results从 Cassandra 查询结果中删除换行符
【发布时间】:2017-11-11 16:41:21
【问题描述】:

我正在使用 python Cassandra 驱动程序来查询数据库。 这是我运行的代码:

from cassandra.cluster import Cluster
from cassandra.query import dict_factory

ips = [...]
cluster = Cluster(ips)
session = cluster.connect()
session.row_factory = dict_factory
session.set_keyspace("mykeyspace")
response = session.execute("SELECT * FROM myDB WHERE mykey = 'xyz';")

在输出中,我在单词前面出现了奇怪的 'n',而换行符曾经是。

例子:

“在寒冷的n森林上空,狂风怒吼n没有树叶可吹。”

有没有办法解决这个问题?

【问题讨论】:

  • 尝试 response = session.execute("SELECT * FROM myDB WHERE mykey = 'xyz';").rstrip('\n')
  • 不起作用,因为 response 属于 类型,而我尝试了 for line in response: line['mycolumn'].strip('\n') 也没有用
  • 您能否提供您的架构以及它们是如何插入的?
  • @Chris Lohfink 我没有那个信息。有没有办法使用 python 驱动程序来获得它?
  • 你能做一个":".join("{:02x}".format(ord(c)) for c in line['mycolumn']) 以便我们检查它是一个\n吗?

标签: python cassandra cassandra-driver


【解决方案1】:

问题在于您的数据摄取,或者任何消耗response 的东西不在驱动程序读取中。它是存储在您的数据库中的n,而不是\n 字符。 python 驱动程序不会从原始字节转义或做任何事情,而是转换为字符串:https://github.com/datastax/python-driver/blob/9869c2a044e5dd76309026437bcda5d01acf99c7/cassandra/cqltypes.py#L693

如果你插入一个\n,你会得到一个退出:

session.execute('CREATE TABLE mydb (mykey text PRIMARY KEY, mycolumn text);')
session.execute("INSERT INTO mydb (mykey, mycolumn) VALUES ('xyz', 'a\nb');")
response = session.execute("SELECT * FROM myDB WHERE mykey = 'xyz';")
for line in response:
   print line['mycolumn']

正确输出:

a
b

有什么东西会占用response 并在之后转义吗?

【讨论】:

  • 您说得对,我们查看了数据库并在那里发现了问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
相关资源
最近更新 更多