簡體   English   中英

Python Cassandra驅動程序:插入期間的編碼問題

[英]Python Cassandra Driver: encoding issue during insertion

我正在開發一個簡單的python模塊,該模塊從tsv文件讀取數據並將其加載到Cassandra鍵空間表中。

我先看一下Datastax給出的示例,一切似乎都還不錯,因此我開始編寫代碼。

該程序正確地從tsv文件中讀取了數據,將其轉換為行列表,並且我驗證了每一行的每個元素都具有用於目標列的正確類型。 但是,當我嘗試將原始數據插入表時,終端會說:

AttributeError:“ float”對象沒有屬性“ encode”

這是代碼:

#Upload data to Cassandra DB (cassandra_df is a Pandas dataframe)
session.set_keyspace(data_ks)
cassandra_df_list = cassandra_df.values.tolist()

query = "INSERT INTO table_str (rowid,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,ba,bb,bc,bd) VALUES (uuid(),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
prepared = session.prepare(query)

for row in cassandra_df_list:

    prepared.bind(row)
    session.execute(prepared)

cluster.shutdown()

為了解決該問題,我進行了很多更改,但是我遇到了新問題,或者用'int'而不是'float'來解決。 我在這里還閱讀了其他問題,並嘗試在prepare.bind()中使用str(row)和repr(row),但是出現了其他錯誤。

我是Python新手,無法找到其他解決方案,您會怎么做?

提前致謝!

編輯抱歉,我忘記提供有關數據庫表的詳細信息。 這是創建語句:

CREATE TABLE prova.table_str (
rowid uuid PRIMARY KEY,
a text,
aa text,
ab text,
ac text,
ad text,
ae text,
af text,
ag text,
ah text,
ai text,
aj double,
ak double,
al double,
am text,
an double,
ao double,
ap double,
aq double,
ar double,
as double,
at double,
au double,
av double,
aw double,
ax double,
ay double,
az double,
b text,
ba double,
bb text,
bc text,
bd text,
c text,
d text,
e int,
f text,
g text,
h text,
i text,
j text,
k double,
l int,
m text,
n double,
o int,
p int,
q text,
r text,
s text,
t text,
u text,
v int,
w text,
x text,
y text,
z text

您沒有共享架構或堆棧跟蹤,但是我猜想數據框具有數字類型,並且您的Cassandra表具有一堆字符串列。 我將概述三種可能的解決方案:

1.)使表類型與您的數據匹配,以便綁定編碼起作用。

2)將參數轉換為與架構相同的類型。 例如,如果它們都是字符串:

prepared.bind(str(c) for c in row)

3.)使用簡單的語句代替准備。 在這種情況下,您將替換? 將標記與%s綁定,然后讓驅動程序使用參數的字符串插值。

query = "INSERT INTO table_str (rowid,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,ba,bb,bc,bd) VALUES (uuid(),%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
for row in cassandra_df_list:
    session.execute(query, row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM