2012-05-20 39 views
0

我已經嘗試了很多不同的變體,只用直線字符串調試變量,但我相信這與數據類型有關?這應該是一個快速原型,但已經吃了一個下午!使用Python將非常規數據插入到Sqite3中

#! usr/bin/ python 
import sqlite3 
import sys 
import psutil 

cpu_usage = psutil.cpu_percent() 
ram_usage = psutil.phymem_usage() 
disk_usage = psutil.disk_usage('/') 
network = psutil.network_io_counters(True) 

conn = sqlite3.connect('stats.db') 
cur = conn.cursor() 

cur.execute("CREATE TABLE stats (id INTEGER PRIMARY KEY, cpu TEXT, ram TEXT, disk TEXT, network TEXT, timestamp DATE DEFAULT (datetime('now','localtime')))") 
cur.execute("INSERT INTO stats (id, cpu, ram, disk, network, timestamp) VALUES (?, ?, ?, ?, ?, ?)", (None, cpu_usage, ram_usage, disk_usage, network, None)) 

print(cur.fetchall()) 
conn.commit() 

conn.close() 

Traceback (most recent call last): 
    File "build_db.py", line 15, in <module> 
    cur.execute("INSERT INTO stats (id, cpu, ram, disk, network, timestamp) VALUES (?, ?, ?, ?, ?, ?)", (None, cpu_usage, ram_usage, disk_usage, network, None)) 
sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type. 
+0

你花時間看看你的數據了嗎? –

+0

你的問題是'psutil.cpu_percent()'返回一個'list',它不是SQLite支持的數據類型。 –

+0

是的Ignacio Vazquez-Abrams多數民衆贊成我認爲的第一件事 - 它絕對非傳統的數據 - 我試過使用不同的數據類型和參數樣式沒有成功。 – rebelbass

回答

0

你真的需要讀documentation for psutil

psutil.disk_usage(路徑)對給定的路徑包括一個總namedtuple ,使用和以字節表示的可用空間加上 使用百分比

返回磁盤使用情況的統計數據。如果路徑不存在,則引發OSError。請參閱 examples/disk_usage.py腳本提供示例用法。

>>> psutil.disk_usage('/') 
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5) 

現在其高達你找出哪個值要插入到數據庫中。

+0

這就是爲什麼這個問題指的是'非常規'數據。我知道psutil.disk_usage('/')返回的內容。 – rebelbass

+1

如果是這種情況,那麼你也可以把你想要的值轉換成一個字符串(這是你插入的類型)。 –

0

我做了一個解決方法 - 它不是很優雅,但我導入simplejson並使用simplejson.dumps(變量)的結果作爲json插入值。

相關問題