Я использую Python 2.7 и пытаюсь загрузить файл с разделителем канала в таблицу sqlite.
Первоначально я пытался блокировать транзакции, но натолкнулся на «Операционная ошибка: такой таблицы нет: ff.Я добавил глобальный оператор в функцию, тоже не помог (не ожидал, но попытался быть уверенным).
Поэтому, удалив вызов функции в целях отладки, я добавил INSERTоператор непосредственно в цикле, и получить ту же ошибку.
Я проверил: clt.db создан и содержит таблицу ff (пусто tho). Ошибка происходит в строке 64 (curs.execute (insertStmt,obs), так как белье было отредактировано).
Я не знаю, имеет ли это какое-либо отношение к решению или нет (надеюсь, нет): я запускаю это на экземпляре micro EC2 с цельюБД записывается в корзину S3, смонтированную через s3fs. Может быть, проблема с задержкой?
- обновление: я получил это, чтобы работать при закрытии как соединения и курсора, так и их открытии. Даже после conn.commit ().Пробовал time.sleep () и that не помогло, поэтому кажется, что соединение / курсор действительно должны быть закрыты и вновь открыты для регистрации присутствия новой таблицы.Почему это я понятия не имею.Любой совет?
Есть идеи?Спасибо.
Aust.
import csv,sqlite3
dbName = 'clt.db'
conn = sqlite3.connect(dbName)
curs = conn.cursor()
def loadBloc(bloc):
global conn,curs
curs.execute('begin')
for obs in bloc:
curs.execute(insertStmt,obs)
conn.commit()
return None
createCode = '''
create table ff
(
a text not null,
b text not null,
c text not null,
d numeric not null,
e text not null,
f text not null,
g text not null,
h numeric not null,
i numeric not null
);
'''
curs.execute(createCode)
conn.commit()
nb = 10000; cnt = 0
bloc = ["" for i in range(nb)]
f = open(infile,'rt')
csv.register_dialect('pipes',delimiter='\t')
with open('ff.dat','r') as f:
reader = csv.reader(f,dialect='pipes')
for row in reader:
a = row[0]
b = row[1]
c = row[2]
u = c.split('/')
if len(u) == 3:
v = [int(u[i]) for i in range(len(u)) ]
c = "{0:4d}-{1:02d}-{2:02d}".format(v[2],v[1],v[0])
else:
c = "1212-12-12"
d = row[3]
e = row[4]
f = row[5]
g = row[6]
h = row[7]
i = row[8]
obs = (a,b,c,d,e,f,g,h,i)
insertStmt = 'insert into ff (a,b,c,d,e,f,g,h,i) values (' + ','.join('?'*9) + ');'
curs.execute(insertStmt,obs)
conn.commit()
print cnt
#bloc[cnt] = (a,b,c,d,e,f,g,h,i)
#if cnt == nb-1:
# loadBloc(bloc)
# print "=============================================="
# bloc = ["" for i in range(nb)]
# cnt = 0
#else:
# cnt = cnt + 1
f.close()
curs.close()
conn.close()