Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python3在CQL中准备SELECT查询?_Python_Python 3.x_Cassandra_Cql - Fatal编程技术网

如何使用Python3在CQL中准备SELECT查询?

如何使用Python3在CQL中准备SELECT查询?,python,python-3.x,cassandra,cql,Python,Python 3.x,Cassandra,Cql,就像我可以准备INSERTquery一样,如何在CQL Python中准备SELECTquery? 插入语句: insert_sql = self.session.prepare( ( "INSERT INTO {} ({}, {}, {}) VALUES (?,?,?)" ).format( self.table_name, "id", "version", "row"

就像我可以准备
INSERT
query一样,如何在CQL Python中准备
SELECT
query? 插入语句:

insert_sql = self.session.prepare(
            (
                "INSERT INTO  {} ({}, {}, {}) VALUES (?,?,?)"
            ).format(
                self.table_name, "id", "version", "row"
            )
        )
并以以下方式执行:

params = (key, "version_1", row, )
                futures.append(
                    (
                        insert_sql,
                        params
                    )
                )
            # Checking whether the formed keys already exists
            results = execute_concurrent(
                self.session, futures, concurrency=1000, raise_on_first_error=False
            )
params = (key, "version_1", row, )
                futures.append(
                    (
                        select_sql,
                        params
                    )
                )
            # Checking whether the formed keys already exists
            results = execute_concurrent(
                self.session, futures, concurrency=1000, raise_on_first_error=False
            )
当我对
执行相同操作时,请选择

select_sql = self.session.prepare(
            (
                "SELECT * FROM {} WHERE {}=%s AND {}=%s AND {}!=%s"
            ).format(
                self.table_name, "id", "version", "row"
            )
        )
并以以下方式执行:

params = (key, "version_1", row, )
                futures.append(
                    (
                        insert_sql,
                        params
                    )
                )
            # Checking whether the formed keys already exists
            results = execute_concurrent(
                self.session, futures, concurrency=1000, raise_on_first_error=False
            )
params = (key, "version_1", row, )
                futures.append(
                    (
                        select_sql,
                        params
                    )
                )
            # Checking whether the formed keys already exists
            results = execute_concurrent(
                self.session, futures, concurrency=1000, raise_on_first_error=False
            )
我面临一个错误:

cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] message="Unsupported "!=" relation: row != ?"
Traceback (most recent call last):
  File "getting_started.py", line 145, in <module>
    example1.insert_data()
  File "getting_started.py", line 97, in insert_data
    self.table_name, "id", "version", "row"
  File "cassandra/cluster.py", line 2405, in cassandra.cluster.Session.prepare
  File "cassandra/cluster.py", line 2402, in cassandra.cluster.Session.prepare
  File "cassandra/cluster.py", line 4062, in cassandra.cluster.ResponseFuture.result
cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] message="Unsupported "!=" relation: row != ?"
我明白了:

etting_started.py:8: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from cassandra.cluster import BatchStatement, Cluster
2019-01-19 19:49:16,582 [INFO] root: setting keyspace...
SELECT * FROM TenMillion WHERE id=%s AND version=%s AND NOT row=%s
2019-01-19 19:49:16,590 [ERROR] cassandra.cluster: Error preparing query:
Traceback (most recent call last):
  File "cassandra/cluster.py", line 2402, in cassandra.cluster.Session.prepare
  File "cassandra/cluster.py", line 4062, in cassandra.cluster.ResponseFuture.result
cassandra.protocol.SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 1:34 no viable alternative at character '%'">
Traceback (most recent call last):
  File "getting_started.py", line 147, in <module>
    example1.insert_data()
  File "getting_started.py", line 100, in insert_data
    select_query
  File "cassandra/cluster.py", line 2405, in cassandra.cluster.Session.prepare
  File "cassandra/cluster.py", line 2402, in cassandra.cluster.Session.prepare
  File "cassandra/cluster.py", line 4062, in cassandra.cluster.ResponseFuture.result
cassandra.protocol.SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 1:34 no viable alternative at character '%'">
u已启动。py:8:不推荐使用警告:不推荐使用“collections”而不是“collections.abc”来使用或导入abc,在3.8中它将停止工作
从cassandra.cluster import BatchStatement,cluster
2019-01-19 19:49:16582[信息]根目录:设置键空间。。。
从id=%s和版本=%s而非行=%s的千万中选择*
2019-01-19 19:49:16590[错误]cassandra.cluster:准备查询时出错:
回溯(最近一次呼叫最后一次):
文件“cassandra/cluster.py”,第2402行,位于cassandra.cluster.Session.prepare中
文件“cassandra/cluster.py”,第4062行,位于cassandra.cluster.ResponseFuture.result中
cassandra.protocol.SyntaxException:
回溯(最近一次呼叫最后一次):
文件“getting_started.py”,第147行,在
示例1.插入_数据()
文件“getting_started.py”,第100行,插入_数据
选择查询
文件“cassandra/cluster.py”,第2405行,位于cassandra.cluster.Session.prepare中
文件“cassandra/cluster.py”,第2402行,位于cassandra.cluster.Session.prepare中
文件“cassandra/cluster.py”,第4062行,位于cassandra.cluster.ResponseFuture.result中
cassandra.protocol.SyntaxException:

卡桑德拉似乎不支持
=选择

请点击此处:


您必须在不使用
的情况下编写查询=并管理代码中的逻辑。

错误返回消息=“Unsupported”=". "!=不支持。请尝试将选择代码更改为:

select_sql = self.session.prepare(
            (
                "SELECT * FROM {} WHERE {}=%s AND {}=%s AND NOT {}=%s"
            ).format(
                self.table_name, "id", "version", "row"
            )
        )

嘿@Frans!你为什么要将
更改为
%s
?而且,你的方法返回了一个错误:
cassandra.protocol.SyntaxException:
我建议更改,{}!=%s改为和不()=%s。假设self.table_name='tablename'这将导致这样的查询:“从tablename中选择*,其中id=%s和version=%s,而不是row=%s”。我认为您在注释中输入了错误。您编写了
()
,而不是
{}
。最新的错误是关于查询中的%s。您没有填写这些变量会导致错误。此操作的另一种方法是什么?我没有达到要求或其他方法。您是否可以使用in运算符并给出一组可接受的值,而不是给出“=“?因此,对于1000行,我需要在每个行参数中有1000个可能的值,以便使用in运算符进行查询。这意味着
!=
运算符内存的1000000倍。这将大大降低我的速度,OOM错误不会太远。行的可能值有多少?”“您的数据中是否存在列?如果每个行列都有不同的值,那么为什么不使用=运算符呢?您可以更新有关您的cassandra表及其模式的更多信息吗?它是csv文件中的一行,任何值都可以。在我的版本1中,我得到了1000万行并将其插入Cassandra,下一次运行可能会带来1400万行,我需要知道哪些行已经存在于其中。因此,我需要进行一个select查询,以便知道传入数据是有新行(因此更新)还是有相同的行(然后没有操作)。表架构为:id、版本、id和版本为PK的行。