2017-01-15 3 views
2

私は、ウェブサイトから株価を掻き集めて、一連の価格の間のトレンド差を計算するプログラムを作成しようとしています。私は購入と売りの価格としてマークされたテーブルにデータを格納することでこれをやっています。 別々に実行すると問題なく動作します。しかし、2番目のプログラムは、同じプログラムに入れてしまいました。SQLiteテーブルから実際の値を返す方法

私はここに私のコード

だそれは株式あたりのレコード数であるとして、リスト内のすべての三つの値から傾向を計算することができることができるようにする必要がありますが、それらはすべて1つのリストに

を入れています

def plot(price,trend_price):  
    for a in stock: 
     count1 = 0 
     count2 = 1 
     index = 0 
     value = ["0"] 
     cursor.execute("""SELECT """+price+""" FROM """+a+"""""") 
     trend = [] 
     rows = cursor.fetchall() 
     for row in rows: 
      print(row[0]) 
      trend.append(float(row[0])) 
      index = index + 1 
      if index == len(web): 
       percentage = [] 
       for i in range(len(web)-1): 
        change = trend[count2]-trend[count1] 
        print(trend[count2],trend[count1]) 
        percent = (change/trend[count1])*100 
        print(percent) 
        percentage.append(percent) 
        count1 = count1 + 1 
        count2 = count2 + 1 
       for i in percentage: 
        print(i) 
        if i <= 0: 
         if i == 0: 
          value.append(0) 
         elif i <= -15: 
          value.append(-4) 
         elif i <= -10: 
          value.append(-3) 
         elif i <= -5: 
          value.append(-2) 
         elif i < 0: 
          value.append(-1) 
        else: 
         if i >= 15: 
          value.append(4) 
         elif i >= 10: 
          value.append(3) 
         elif i >= 5: 
          value.append(2) 
         elif i >= 0: 
          value.append(1) 

       for i in value: 
        t = str(i) 
        cursor.execute(""" 
         REPLACE INTO """+ a +""" 
         ("""+trend_price+""") 
         VALUES 
         ("""+ t +""") 
         """) 

あなたはPyの中None値に変換されますテーブルにNULL値を持つ

Traceback (most recent call last): 
    File "C:/Users/Luke_2/Desktop/Computing/Coursework/live/Jan15.py", line 172, in <module> 
    run() 
    File "C:/Users/Luke_2/Desktop/Computing/Coursework/live/Jan15.py", line 167, in run 
    plot("BuyPrice","TrendBuy") 
    File "C:/Users/Luke_2/Desktop/Computing/Coursework/live/Jan15.py", line 88, in plot 
    trend.append(float(row[0])) 
TypeError: float() argument must be a string or a number, not 'NoneType' 
+0

あなたのテーブルには 'NULL'があります。つまり、' row [0] 'は' None'に設定されています。おそらく、NULL以外の値だけを返すようにクエリを更新する必要がありますか? –

+0

@MartijnPietersああ、それは後でトレンドを追加して私の代わりにそれを使用してnullのfiledsを作成する新しい行にそれらを追加する、私はそれを無視すると思った – HalfIrish

答えて

0

次のように私が手にエラーがありますトーン。 Noneをフロートに変換することはできません。おそらく、NULLでない行だけを選択したいのですか?

cursor.execute(
    "SELECT ? FROM {} WHERE columnname is not NULL".format(a), 
    (price,)) 

最初の列の列名がわからない場合は、クエリを調整する必要があります。

価格のSQLパラメータを使用するようにクエリを変換しました(パラメータを使用してテーブル名を挿入することはできません。ハードコードされたテーブル名のみを使用し、信頼できないデータは受け入れません)。

代替は、Pythonでそれらの行をスキップすることです:

if rows[0] is None: 
    continue 

sqlite3モジュールがSQLite and Python Types sectionを参照してください、あなたの値を変換できることに注意してください。データベース内で列がREALと宣言されている場合、は既にに指定されています。とにかくfloatオブジェクトです。

+0

ありがとう@Martijn – HalfIrish

関連する問題