Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,如何按给定顺序将列表插入表的列中_Python_Mysql - Fatal编程技术网

Python,如何按给定顺序将列表插入表的列中

Python,如何按给定顺序将列表插入表的列中,python,mysql,Python,Mysql,我的表有3列:ID、Author和In_顺序。我正在阅读一个文件,其中一行包含一个作者列表,列表之间用逗号分隔。我试图实现的是在ID字段中用正确的ID将作者的姓名插入作者列,然后插入它在列表中出现的位置(始终按顺序排列)。最后我想要的是我的桌子看起来像这样: ID Author In_order 1 Author1 1 1 Author2 2 1 Author3 3 2 Author1 1 2 Author2 2

我的表有3列:ID、Author和In_顺序。我正在阅读一个文件,其中一行包含一个作者列表,列表之间用逗号分隔。我试图实现的是在ID字段中用正确的ID将作者的姓名插入作者列,然后插入它在列表中出现的位置(始终按顺序排列)。最后我想要的是我的桌子看起来像这样:

ID    Author    In_order
1     Author1    1
1     Author2    2
1     Author3    3
2     Author1    1
2     Author2    2
3     Author1    1
3     Author2    2
我已经使用枚举函数为每个作者在列表中指定了一个位置

以下是与此问题相关的代码

author_list = line.split(",")

        for In_order, author in enumerate(author_list, start=1):
            In_order = In_order
            author = author

db1.execute('''INSERT INTO authors(
                    ID, AUTHOR, In_order) VALUES(%s,%s,%s)''',
                    (ID, author, In_order))
我不确定在in_order和author变量中究竟存储什么。 代码将运行,但只有列表中的最后一个作者及其相应的ID和在列表中的正确位置被插入到表中。即:

ID    Author    In_order
1     Author3    3
2     Author2    2
3     Author2    2

如果您有任何建议,我将不胜感激。我对python和mysql都是新手

您希望
.execute
语句位于循环中

    for In_order, author in enumerate(author_list, start=1):
        In_order = In_order
        author = author

        db1.execute('''INSERT INTO authors(
                           ID, AUTHOR, In_order) VALUES(%s,%s,%s)''',
                           (ID, author, In_order))

您希望
.execute
语句位于循环中

    for In_order, author in enumerate(author_list, start=1):
        In_order = In_order
        author = author

        db1.execute('''INSERT INTO authors(
                           ID, AUTHOR, In_order) VALUES(%s,%s,%s)''',
                           (ID, author, In_order))

有两件事不对。首先,在MySQL中,您不需要存储顺序,而是存储稍后要排序的数据。也许您在顺序字段中错误地标记了此字段。也许这些数据实际上是另一种东西


其次,作者ID应该是唯一的,我认为您的ID是重复的

有两件事不对。首先,在MySQL中,您不需要存储顺序,而是存储稍后要排序的数据。也许您在顺序字段中错误地标记了此字段。也许这些数据实际上是另一种东西


其次,作者ID应该是唯一的,我认为您的ID是重复的

您的insert是从
for
循环中“向外倾斜”的,因此
db1
填充在循环完成后运行,这意味着您只能得到循环迭代的最后一项。您的insert是从
for
循环中“向外倾斜”的,因此
db1
填充在循环完成后运行,这意味着您将只能得到循环迭代的最后一项。我想我可以看到您来自何方。。在本例中,In_order只是一个变量,我想在其中存储每个作者的位置。关于唯一键,我有一个复合主键,其中ID和列表中作者的顺序值(位置)的组合是唯一的,所以它仍然允许我在ID列中重复ID。这是不是有点道理,还是我太离谱了?感谢@Dlite922的反馈,我想你希望执行函数像@bernie说的那样位于for循环范围内,因为在for循环之外,变量ID、author和In_order没有意义(技术术语:超出范围),我想我可以看到你的来历。。在本例中,In_order只是一个变量,我想在其中存储每个作者的位置。关于唯一键,我有一个复合主键,其中ID和列表中作者的顺序值(位置)的组合是唯一的,所以它仍然允许我在ID列中重复ID。这是不是有点道理,还是我太离谱了?感谢@Dlite922的反馈,我想您希望执行函数像@bernie说的那样位于for循环范围内,因为在for循环之外,变量ID、author和In_顺序没有意义(技术术语:超出范围)