如何在不进入新行的情况下将数据添加到sqlite 3中的表中

时间:2017-01-15 14:37:28

标签: python sqlite python-3.x

我正在使用sqlite来持有一系列关于股票的数据,如买入价,卖出价,趋势买入价等。 我添加了价格,那很好但是当我添加趋势时,它会转到一个新行,如何将其与其他数据一起添加? 我已经尝试使用替换和更新,但它仍然添加导致我的其他列返回none,这导致我的代码出现问题。

我的代码如下

def plot():
    for a in stock:
        count1 = 0
        count2 = 1
        index = 0
        value = ["0"]
        cursor.execute("""SELECT BuyPrice 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 +"""
                        (TrendBuy)
                        VALUES
                        ("""+ t +""")
                        """)

this is what i mean if its a bit hard to understand

1 个答案:

答案 0 :(得分:1)

SQLite的REPLACE INTO需要一种“查找列”来查找值,然后替换下一个相应的值。如果不存在匹配项,则会插入新行。考虑在您的操作查询中加入 BuySell 。下面还格式化SQL字符串和参数化查询:

cursor.execute("REPLACE INTO {} (BuySell, TrendBuy) VALUES (?, ?)".format(a), (row[0], t))

或者,您可以运行更新查询以避免无意插入,因为在循环逻辑中不会生成新的 BuySell 值。

cursor.execute("UPDATE {} SET TrendBuy = ? WHERE BuySell = ?".format(a), (t, row[0]))

除此之外 - 您似乎将每个股票存储在自己的表中。为了提高效率,可伸缩性和更轻松的查询,请考虑使用StockName或Symbol列的一个Stock表。