如何使用python查询表中的所有结果并修改每一行
我试图遍历sqlite3数据库表中的所有行,并根据列变量在另一个表中的列和行中输入不同的信息 我尝试过使用fetchone和fetchall进行循环,一个简单的while-True:-这一切都导致了不同的错误 下面是一个孤立代码的一般示例,我认为它至少说明了我正在尝试做的事情如何使用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()
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(...):
...