Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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_Sqlite_Loops_Select_While Loop - Fatal编程技术网

如何使用python查询表中的所有结果并修改每一行

如何使用python查询表中的所有结果并修改每一行,python,sqlite,loops,select,while-loop,Python,Sqlite,Loops,Select,While Loop,我试图遍历sqlite3数据库表中的所有行,并根据列变量在另一个表中的列和行中输入不同的信息 我尝试过使用fetchone和fetchall进行循环,一个简单的while-True:-这一切都导致了不同的错误 下面是一个孤立代码的一般示例,我认为它至少说明了我正在尝试做的事情 c.execute('SELECT * FROM {0}'.\ format(ItemPrice_table)) while True: row = c.fetchall()

我试图遍历sqlite3数据库表中的所有行,并根据列变量在另一个表中的列和行中输入不同的信息

我尝试过使用fetchone和fetchall进行循环,一个简单的while-True:-这一切都导致了不同的错误

下面是一个孤立代码的一般示例,我认为它至少说明了我正在尝试做的事情

c.execute('SELECT * FROM {0}'.\
        format(ItemPrice_table))

    while True:
        row = c.fetchall()
        if(row == None):
            break

        Item = row[0]
        Price = row[1]

        if(Price <= 10):
            Category = "Low"

        if(Price > 10):
            Category = "High"

        if(Category == High):
            c.execute("INSERT INTO {0} ({1}, {2}, {3}) VALUES ('{4}', 'Expensive' 'Red')".\
                format(ItemCodes_table, Code_column0, Code_column1, Code_column2, Item))

        if(Category == Low):
            c.execute("INSERT INTO {0} ({1}, {2}, {3}) VALUES ('{4}', 'Cheap' 'Blue')".\
                format(ItemCodes_table, Code_column0, Code_column1, Code_column2, Item))
因此,我希望它在ItemPrice_表中的每一行循环,并根据price分配一个类别,然后将该类别写入ItemCodes_表中

看起来应该很简单 我可以很容易地用php编写这样的函数 但正如我所说,无论我做什么,我都无法让它运行
经过几个小时的实验,我完全没有主意了,我真的很感激能得到的任何帮助

执行fetchall时,会得到一个包含结果的列表。对于列表中的每一项,您都会按照select返回的顺序获得一个元素。您应该将代码更改为:

c.execute('SELECT * FROM {0}'.\
        format(ItemPrice_table))
data = c.fetchall()
for row in data:    

    Item = row[0]
    Price = row[1]

    if (Price <= 10):
        Category = "Low"

    if (Price > 10):
        Category = "High"

    if (Category == "High"):
        c.execute("INSERT INTO {0} ({1}, {2}, {3}) VALUES ('{4}', 'Expensive' 'Red')". \
                  format(ItemCodes_table, Code_column0, Code_column1, Code_column2, Item))

    if (Category == "Low"):
        c.execute("INSERT INTO {0} ({1}, {2}, {3}) VALUES ('{4}', 'Cheap' 'Blue')". \
                  format(ItemCodes_table, Code_column0, Code_column1, Code_column2, Item))

猜想您可以使用它,根据需要进行更改,在SQL中完成您想要的所有操作,而不需要代码

将用于轻松移动到其他系统/语言

INSERT INTO ItemCodes_table 
    SELECT
        CASE WHEN Price <= 10 THEN 'low' ELSE 'high' END AS value_to_use,
        'whatever should be in Code_column1',
        'whatever should be in Code_column2',
        item
    FROM ItemPrice_Table
;
如果ItemPrice_表数据如下

1项目A 5 2项目B 15 3项目C 9 4项目11 5项目3 6项目F 20 7项目G 17 它提供了如下数据:

代码_列中应为低值的内容1代码_列中应为低值的内容2项目A 代码_列中应为高值的项目1代码_列中应为高值的项目2项目B 代码_列中应为低值的内容1代码_列中应为低值的内容2项目C 代码_列1中应为高位的内容代码_列2中应为高位的内容Itemd 代码_列中应为低值的内容1代码_列中应为低值的内容2项目E 代码_列中应为高值的项目1代码_列中应为高值的项目2项目F 代码_列中应为高值的项目1代码_列中应为高值的项目2项目G
如果你知道你会犯什么样的错误,那就好了。 但fetchall似乎会返回一个行元组列表,您的代码将此结果视为一行

文档建议将execute的结果视为迭代器

因此,您可以:

for row in c.execute(...):
   ...
而不是一个while-True循环

for row in c.execute(...):
   ...