# 遍历源数据库中的所有表格 for table in tables: table_name = table[0] # 读取源表格数据 source_cursor.execute(f"SELECT DISTINCT * FROM {table_name};") data = source_cursor.fetchall() # 获取源表格的列名 source_cursor.execute(f"PRAGMA table_info({table_name});") columns = [column[1] for column in source_cursor.fetchall() if column[1] != 'id'] # 创建目标表格(如果不存在) cursor.execute(f"CREATE TABLE IF NOT EXISTS {table_name} ({','.join(columns)});") # 插入源表格数据到目标表格 insert_statement = f"INSERT OR IGNORE INTO {table_name} ({','.join(columns)}) VALUES ({','.join(['?'] * (len(columns) + 1))});" cursor.executemany(insert_statement, data)報這個sqlite3.OperationalError: 12 values for 11 columns
时间: 2024-04-12 15:28:25 浏览: 144
matlab_extract_word_table.rar_Table_extract;word;table_matlab wo
根据你提供的代码和错误信息,看起来问题出在绑定值的数量上。在插入语句中,你使用了`cursor.executemany()`来执行多次插入操作,但是你提供的绑定值数量与目标表格的列数仍然不匹配。
在你的代码中,你使用了`len(columns) + 1`作为插入语句中绑定值的数量,这会导致绑定值的数量比目标表格的列数多一个。这可能是导致错误的原因。
请尝试将插入语句中的绑定值数量改为`len(columns)`,即与目标表格的列数完全匹配。修改后的代码示例如下:
```python
# 遍历源数据库中的所有表格
for table in tables:
table_name = table[0]
# 读取源表格数据
source_cursor.execute(f"SELECT DISTINCT * FROM {table_name};")
data = source_cursor.fetchall()
# 获取源表格的列名
source_cursor.execute(f"PRAGMA table_info({table_name});")
columns = [column[1] for column in source_cursor.fetchall() if column[1] != 'id']
# 创建目标表格(如果不存在)
cursor.execute(f"CREATE TABLE IF NOT EXISTS {table_name} ({','.join(columns)});")
# 插入源表格数据到目标表格
insert_statement = f"INSERT OR IGNORE INTO {table_name} ({','.join(columns)}) VALUES ({','.join(['?'] * len(columns))});"
cursor.executemany(insert_statement, data)
```
请确保你的绑定值的数量与目标表格的列数完全匹配,这样就能避免错误并成功插入数据到目标表格中。
阅读全文