我正在尝试使用Python sqlite3库从CSV文件创建SQL表。 那就是我写的代码:
import csv
import sqlite3
csv_file = 'path/to/file.csv'
db = sqlite3.connect('clients.db')
db.execute('''CREATE TABLE main(
ID INT PRIMARY KEY NOT NULL,
name VARCHAR,
email VARCHAR,
address VARCHAR);''')
# That part is only for getting the number of rows in the table
with open(csv_file, 'r') as csv_table:
reader = csv.DictReader(csv_table, delimiter=';')
rows = sum(1 for r in reader)
# Here I'm reading the table
with open(csv_file, 'r') as csv_table:
reader = csv.DictReader(csv_table, delimiter=';')
for i, row in enumerate(reader):
db.execute('''INSERT INTO main VALUES
('{idn}', '{name}', '{email}', '{add}');'''.format(idn=i,
name=row['name'],
email=row['email'],
add=row['address']))
print('{}/{}:\t{}'.format(i+1, rows, row))
db.commit()
db.close()
运行此代码后,我尝试使用sqlite3访问该表,但每次我发送有关“主”表的查询时,都会收到错误消息:“错误:没有这样的表:主”。
我尝试使用Python读取表格,并且效果很好:
import sqlite3
db = sqlite3.connect('clients.db')
rows = db.execute('SELECT * FROM main;')
for r in rows:
print(r)
我正在从与运行SQLite3相同的目录中运行此脚本。
我使用的是Python 3.6,我的操作系统是Ubuntu 16.04.6 LTS。
答案 0 :(得分:1)
问题在于Python和sqlite3实际上运行在不同的位置,因此它们使用了不同的数据库。
我已经改变
db = sqlite3.connect('clients.db')
到
db = sqlite3.connect('full/path/to/clients.db')
现在工作正常。