【问题标题】:mysql LOAD DATA INFILE with auto-increment primary keymysql LOAD DATA INFILE 与自动增量主键
【发布时间】:2023-03-03 02:55:02
【问题描述】:

我正在尝试使用“LOAD DATA LOCAL INFILE 'filename' INTO TABLE 'tablename'”将数据文件加载到 mysql 表中。

问题是源数据文件包含每个字段的数据,但缺少主键('id' 列)。我在创建数据库时添加了一个唯一的 id 字段,但现在我需要从下一个字段开始将数据导入表中,并在导入时自动增加 id 字段。

def create_table():
            cursor.execute ("""
                    CREATE TABLE variants
                    (
                    id integer(10) auto_increment primary key,
                    study_no CHAR(40),
                    other fields.....


                    )
                    """)

这是我的 LOAD 查询

query1= "LOAD DATA LOCAL INFILE '"+currentFile+"' INTO TABLE variants FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'"

有什么想法吗?

总结: 创建一个带有额外 id 字段的表,该字段将自动递增 将数据(20 列)加载到 21 个字段的表中,跳过 id 字段 让 id 字段自动填充自增索引。

【问题讨论】:

    标签: python mysql import load-data-infile


    【解决方案1】:

    指定列列表:

    默认情况下,当 LOAD DATA INFILE 语句末尾没有提供列列表时,输入行应包含每个表列的字段。如果您只想加载表格的某些列,请指定列列表:

    LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

    http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    【讨论】:

    • 是否有一种简单的方法可以列出所有 20 个列名,可能类似于列表 [1:] 表示法?还是我必须输入每个列的名称,例如 study_no、family_no 等?谢谢
    • 列列表必须在最后,并且 id 列必须有一个 set=null 才能自动递增
    • 要添加列名,你应该可以这样做: cursor.execute("DESCRIBE tablename"); query = "LOAD DATA INFILE 'data.txt' INTO TABLE 表名 (%s)" % ', '.join([x[0] for x in cursor.fetchall()][1:])
    【解决方案2】:

    列列表必须在最后,并且 id 列必须有一个 set=null 才能自动递增 - 不幸的是,mysql 文档非常模糊。他们只是说 col1,col2,但是是源文件或 dest 表中的那些。这个页面通过清晰的例子帮助了很多。

    http://www.experts-exchange.com/articles/Database/MySQL/Load-Delimited-Data-into-MySQL-Server.html

    【讨论】:

      【解决方案3】:

      如果 csv 记录是这样的,请使用以下查询

      "21231","234424","我的类别","1"

      加载数据本地文件 'C:/wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' INTO 表猫字段由 ',' 封闭由 '"' 终止 以“\r\n”结尾的行 (category_id,parent_id,category,is_leaf)

      我已经成功地做到了。 :)

      【讨论】:

        【解决方案4】:
        LOAD DATA LOCAL INFILE '/var/www/.........../file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' (field1,field2,.........,fieldn)
        

        这是在 ubuntu 的情况下

        【讨论】:

          【解决方案5】:

          您的数据文件应如下所示: null,学习字符,其他领域... MySQL 将插入递增的 id 而不是 null

          【讨论】:

            猜你喜欢
            • 2012-10-05
            • 2012-12-14
            • 1970-01-01
            • 2010-12-12
            • 2018-05-22
            • 2013-09-24
            • 1970-01-01
            相关资源
            最近更新 更多