私は現在、Python 3.6(Spyderの下)、より正確にはsqlite3(3.14.2)を使用してデータベースを構築しようとしています。この最後のモジュールはデータベースにリスト挿入を有効にするように設計されていないので、リストを文字列に変換するためにjson(2.0.9)モジュールを使用しています。以下の別のデータベースからデータを転送するために使用される機能や、どこで作成し、最初にリストを挿入し、私の奇妙な結果を返します:私は(基本「NAME3初めてそれを起動するとjson.loads(string)の結果はまだ文字列です
def database_concatenation():
global log,name2,name3,timefin,path
conn = sqlite3.connect(path+name2)
cursor = conn.cursor()
conn2 = sqlite3.connect(path+name3)
cursor2 = conn2.cursor()
cursor.execute("""select sqlite_version()""")
print(cursor.fetchall())
cursor.execute("""SELECT * FROM {}""".format(name2))
for dataline in cursor.fetchall():
cursor2.execute("""
SELECT * FROM {}
WHERE (
timestp = ?
AND idq = ?
AND idz = ?
AND portq = ?
AND portz = ?
AND prot = ?);
""".format(name3) , (dataline[0],dataline[1],dataline[2],dataline[3],dataline[4],dataline[5]))
result = cursor2.fetchone()
if result == None:
with open(path+log,"a") as login:
login.write(timefin + " Warning ! Unusual connection :" + str(dataline)+ '\n')
cursor2.execute("""
INSERT INTO {}(timestp,
idq,
idz,
portq,
portz,
prot,
Leftmean,
Leftstdev,
Leftmean10,
Leftstdev10,
Rightmean,
Rightstdev,
Rightmean10,
Rightstdev10,
nbdays) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);""".format(name3), (dataline[0],dataline[1],dataline[2],dataline[3],dataline[4],dataline[5],dataline[6],0,json.dumps([dataline[6]]),0,dataline[7],0,json.dumps([dataline[7]]),0,1))
else:
print(result[8])
Leftmean10 = json.loads(result[8])
print(Leftmean10)
Rightmean10 = json.loads(result[12])
print(type(Leftmean10))
nbdays = result[14]
aL,bL = intervalle_confiance(result[6],result[7],result[14])
aL10,bL10 = intervalle_confiancebis(Leftmean10,result[9],min(nbdays,10))
aR,bR = intervalle_confiance(result[10],result[11],result[14])
aR10,bR10 = intervalle_confiancebis(Rightmean10,result[13],min(nbdays,10))
rhwmny = dataline[7]
lhwmny = dataline[6]
if nbdays >= 10:
Leftmean10.pop(0)
Rightmean10.pop(0)
Leftmean10.append(dataline[6])
Rightmean10.append(dataline[7])
Lmean = result[6]
Lmean = Lmean*(nbdays/(nbdays+1)) + dataline[6]/(nbdays)
Rmean = result[10]
Rmean = Rmean*(nbdays/(nbdays+1)) + dataline[7]/(nbdays)
Lstdev,Rstdev = result[7],result[11]
add = (dataline[6] - Lmean)
Lstdev = sqrt(Lstdev*Lstdev + (add*add))
add = (dataline[7] - Rmean)
Rstdev = sqrt(Rstdev*Rstdev + (add*add))
mean = (sum(Leftmean10)/min(10,nbdays))
meansquare = mean*mean
othermean = (sum([i*i for i in Leftmean10])/min(10,nbdays))
Lstdev10 = othermean - meansquare
mean = (sum([int(i) for i in Rightmean10])/min(10,nbdays))
meansquare = mean*mean
othermean = (sum([i*i for i in Rightmean10])/min(10,nbdays))
Rstdev10 = othermean - meansquare
nbdays +=1
Leftmean10 = json.dumps(result[8])
Rightmean10 = json.dumps(result[12])
print(Leftmean10)
cursor2.execute("""UPDATE {} SET Leftmean = ?,
Leftstdev = ?,
Leftmean10 = ?,
Leftstdev10 = ?,
Rightmean = ?,
Rightstdev = ?,
Rightmean10 = ?,
Rightstdev10 = ?,
nbdays = ? WHERE (timestp = ? AND idq = ?
AND idz = ?
AND portq = ?
AND portz = ?
AND prot = ?);""".format(name3), (Lmean,Lstdev,Leftmean10,Lstdev10,Rmean,Rstdev,Rightmean10,Rstdev10,nbdays,result[0],result[1],result[2],result[3],result[4],result[5]))
conn.commit()
conn2.commit()
conn.close()
conn2.close()
bla= "it works"
return(bla)
を"が作成されたものの空の場合)、条件" if result = None "が常に検証され、データベースが正しく埋められます。特に、私のリストが正常に機能json.dumps(mylist)
を使用して、ストックされた二回目の処理中に問題が発生します。
print(result[8])
Leftmean10 = json.loads(result[8])
print(Leftmean10)
Rightmean10 = json.loads(result[12])
print(type(Leftmean10))
戻り
"[69]"
[69]
<class 'str'>
ブロックを、私はさらにこのため'str'
タイプの後にエラーが発生します。
私は何が起こっているのか分かりません。 json.loads
関数はリストを返しますか?それはそれがそうするものです:print(Leftmean10)
は私に[69]
を返し、"[69]"
を返しません。それはまだプログラムのためのものです^^
ありがとうございます!
これは** JSON文字列**です。正しい出力です。文字 '' ['、' 6 '、...'を含む文字列を書くことができます。 –
申し訳ありませんが、私はあなたのコメントを完全に理解していませんでしたx)!私のために、リストのような['、'、 '2'、 '、'、 '3'、 ']'ではなく、 '[2,3]'を返す 'json.loads(" [2,3] ( "[2,3]")x) –