【问题标题】:Using Python quick insert many columns into Sqlite\Mysql使用 Python 快速将许多列插入 Sqlite\Mysql
【发布时间】:2011-04-13 13:08:27
【问题描述】:

如果 Newdata 是 x 列的列表,如何获得唯一列的数量——第一个元组的成员数。 (Len 不重要。)更改“?”的数量。使用下面的语句匹配列并插入。

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()

【问题讨论】:

    标签: python mysql sqlite python-db-api


    【解决方案1】:

    “Newdata 是 x 列的列表”,我想你的意思是 x 元组,从那以后你继续说“第一个元组”。如果Newdata 是元组列表,则y = len(Newdata[0]) 是这些元组中第一个中的项目数。

    假设这是您想要的数字(并且所有元组最好具有相同数量的项目,否则executemany 失败!),@Nathan 答案中的总体思路是正确的:构建带有适当数量的逗号分隔问号的字符串:

    holders = ','.join('?' * y)
    

    然后将其插入到 SQL 语句的其余部分。 @Nathan 的插入方式适用于大多数 Python 2.any 版本,但如果您有 2.6 或更高版本,

    sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
    

    目前是首选(它也适用于 Python 3.any)。

    最后,

    csr.executemany(sql, Newdata)
    

    会做你想做的事。完成后记得提交事务!-)

    【讨论】:

      【解决方案2】:

      如果您要查找 Newdata 中所有元素中的最大项目数,只需:

      num_columns = max(len(t) for t in Newdata)
      

      当然,这是假设 python 2.5 或更高版本。

      并不是说我确定你尝试的方法会起作用,但是插入语句会变成:

      sql = "INSERT INTO test.data VALUES (%s)" % ",".join('?' * num_columns)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-14
        相关资源
        最近更新 更多