Python SQLite插入报错:sqlite3.OperationalError: no such column: cities_name
问题解决:sqlite3.OperationalError: no such column: cities_name
错误根源
- INSERT语句格式错误:你写的
insert or ignore into cities values (cities_name, city_population)中,cities_name和city_population被SQLite当作列名解析,而非你要插入的参数值;同时表结构定义了3个必填字段(city_id是主键且非空),但你只提供了两个值,不符合表结构要求。 - 人口数据类型不匹配:
cities_list中的人口是带逗号/空格的字符串,无法直接插入integer类型的city_population字段。
修正方案
步骤1:调整表结构(让主键自动生成)
把city_id改为自增整数,这样插入数据时无需手动指定主键值:
cursor.execute("create table if not exists cities(city_id INTEGER PRIMARY KEY AUTOINCREMENT, cities_name text, city_population integer)")
步骤2:修正INSERT语句并处理数据
- 使用SQL参数占位符
?传递值,避免列名混淆 - 清理人口数据中的逗号和空格,转为整数
修正后的完整代码:
import sqlite3 connection = sqlite3.connect("cities.db") cursor = connection.cursor() # 调整表结构,让city_id自动自增 cursor.execute("create table if not exists cities(city_id INTEGER PRIMARY KEY AUTOINCREMENT, cities_name text, city_population integer)") # 处理人口数据:去掉逗号和空格,转为整数 cities_list = [ ('Minneapolis', int('425,336'.replace(',', ''))), ('St. Paul', int('307,193'.replace(',', ''))), ('Dallas', int('1,288,000'.replace(',', ''))), ('Memphis', int('628, 127'.replace(',', '').replace(' ', ''))), ('San Francisco', int('815,201'.replace(',', ''))), ('Milwaukee', int('569,330'.replace(',', ''))), ('Denver', int('711,463'.replace(',', ''))), ('Phoenix', int('1,625,000'.replace(',', ''))), ('Chicago', int('2,697,000'.replace(',', ''))), ('New York', int('8,468,000'.replace(',', ''))) ] # 明确指定插入的列,使用?作为参数占位符 cursor.executemany("insert or ignore into cities (cities_name, city_population) values (?, ?)", cities_list) connection.commit() # 别忘了提交事务! # 打印所有数据 for row in cursor.execute("select * from cities"): print(row) print('******************************************') # 查询指定城市 cursor.execute("select * from cities where cities_name=:c", {"c": "Minneapolis"}) search = cursor.fetchall() print(search) connection.close()
关键注意点
- 执行插入/更新操作后必须调用
connection.commit(),否则数据不会写入数据库 - 使用参数占位符
?或命名占位符(如:c)是SQLite操作的最佳实践,既避免语法错误,也能防止SQL注入 - 确保插入的数据类型和表定义的字段类型匹配
内容的提问来源于stack exchange,提问作者Josh T
相关产品推荐
相关产品推荐

