python一维数组和二维数组插入数据库

我现在有一个二维数组,一个一维数组(对应数据库中的一列),我想要分别将他们插入数据库,目前二维数据可以插入,但是一维数组插入的时候不是从数据库的第一行开始插入,而是从尾部插入。下面是相关代码,不知道要怎么修改了

def init_db(dbpath):
    sql = '''
         create table lndz
        (id integer primary key autoincrement,
        datetime date,
         date date,
         time text ,
         dongjing numeric,
         beiwei numeric,
         zhenzhong text,
         zhenji numeric
         )
 '''  # 创建数据表
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
    conn.close()


def savedb(datalist, dbpath):
    init_db(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for i, row in enumerate(datalist):
        cur.execute('INSERT INTO lndz (date, time, dongjing, beiwei,zhenzhong, zhenji) VALUES (?, ?, ?, ?, ?, ?)', row)
        conn.commit()
    cur.close()
    conn.close()


def savetime(data1d, dbpath):
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for item in data1d:
        cur.execute('INSERT INTO lndz (datetime) VALUES (?)', (item,))
        conn.commit()

    cur.close()
    conn.close()


if __name__ == '__main__':
    datalist = shaixuan()
    timelist = get_time()
    dbpath = "lndz.db"
    savedb(datalist, dbpath)
    savetime(timelist, dbpath)
    print("成功")

img

cur.execute('INSERT INTO lndz (datetime) VALUES (?)', (item,))
你这个是把日期全部插入到datatime列里面了
如果你希望分别插入data time后面那些,你得模仿上面一行sql那样去写。
你可能理解错了“插入”
对于数据库来说,添加一行数据才叫做“插入”
而如果是将数据添加到现有行的空白处,这个叫做“修改”(UPDATE)
而且,为了更新到正确的行,你的表设计也不对,你得先添加一列作为主键(唯一列)
然后才能去更新某一行。

【以下回答由 GPT 生成】

在代码中,一维数组是通过执行INSERT INTO lndz (datetime) VALUES (?)语句插入到数据库的。该语句没有指定插入到哪一行,故默认插入到末尾。要使得一维数组从数据库的第一行开始插入,可以按照以下步骤进行修改:

  1. 在初始化数据库表时,为lndz表添加一个id列作为主键,并使其自增。
def init_db(dbpath):
    sql = """
         create table lndz
        (id integer primary key autoincrement,
        datetime date,
         date date,
         time text ,
         dongjing numeric,
         beiwei numeric,
         zhenzhong text,
         zhenji numeric
         )
 """
    # 创建数据表
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
    conn.close()
  1. 修改插入一维数组的代码,指定插入到第一行,即将cur.execute('INSERT INTO lndz (datetime) VALUES (?)', (item,))修改为cur.execute('INSERT INTO lndz (id, datetime) VALUES (?, ?)', (i+1, item))
def savetime(data1d, dbpath):
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for i, item in enumerate(data1d):
        cur.execute('INSERT INTO lndz (id, datetime) VALUES (?, ?)', (i+1, item))
        conn.commit()

    cur.close()
    conn.close()

这样,一维数组将会从数据库的第一行开始插入。请注意,修改后的代码中,id的值是递增的,所以要确保数据库中的id列是连续自增的。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^