Не удалось запустить выполнение (sqlcmd) sqlite3 с использованием Python, Ubuntu

Я хочу использовать sqlite3 для работы с данными в Ubuntu с помощью python. Но я всегда терпел неудачу и получаю ошибки. Коды, относящиеся к базе данных, следующие:

sqlite = "%s.db" % name
#connnect to the database
conn = sqlite3.connect(sqlite)
print "Opened database successfully"
c = conn.cursor()

#set default separator to "\t" in database
c.execute(".separator "\t"")
print "Set separator of database successfully"

#create table data_node
c.execute('''create table data_node(Time int,Node Text,CurSize int,SizeVar int,VarRate real,Evil int);''')
print "Table data_node created successfully"
node_info = "%s%s.txt" % (name,'-PIT-node')
c.execute(".import  %\"s\" data_node") % node_info
print "Import to data_node successfully"

#create table data_face
data_info = "%s%s.txt" % (name,'-PIT-face')
c.execute('''create table data_face(Time int,Node Text,TotalEntry real,FaceId int,FaceEntry real,Evil int);''')
c.execute(".import \"%s\" data_face") % face_info

#get the final table : PIT_node
c.execute('''create table node_temp as select FIRST.Time,FIRST.Node,ROUND(FIRST.PacketsRaw/SECOND.PacketsRaw,4) as SatisRatio from tracer_temp FIRST,tracer_temp SECOND WHERE FIRST.Time=SECOND.Time AND FIRST.Node=SECOND.Node AND FIRST.Type='InData' AND SECOND.Type='OutInterests';''')
c.execute('''create table PIT_node as select A.Time,A.Node,B.SatisRatio,A.CurSize,A.SizeVar,A.VarRate,A.Evil from data_node A,node_temp B WHERE A.Time=B.Time AND A.Node=B.Node;''')

#get the final table : PIT_face
c.execute('''create table face_temp as select FIRST.Time,FIRST.Node,FIRST.FaceId,ROUND(FIRST.PacketsRaw/SECOND.PacketsRaw,4) as SatisRatio,SECOND.Packets from data_tracer FIRST,data_tracer SECOND WHERE FIRST.Time=SECOND.Time AND FIRST.Node=SECOND.Node AND FIRST.FaceId=SECOND.FaceId AND FIRST.Type='OutData' AND SECOND.Type='InInterests';''')
c.execute('''create table PIT_face as select A.Time,A.Node,A.FaceId,B.SatisRatio,B.Packets,ROUND(A.FaceEntry/A.TotalEntry,4),A.Evil from data_face as A,face_temp as B WHERE A.Time=B.Time AND A.Node=B.Node AND A.FaceId = B.FaceId;''')

conn.commit()
conn.close()

Эти sql-команды верны. Когда я запускаю код, он всегда показывает sqlite3.OperationalError: near ".": syntax error. Итак, как изменить мой код и есть ли другие ошибки в других командах, таких как create table?

Пожалуйста, предоставьте нам полную трассировку, а не только краткое описание исключения. Это скажет нам, какая из этих многих строк SQL дает сбой и на какую строку жалуется.

abarnert 27.03.2018 07:13

Кроме того, как узнать «Эти sql-команды верны»?

abarnert 27.03.2018 07:13

На самом деле, как и вставлено, он получает SyntaxError от Python и вообще не запускается. У вас есть неэкранированные двойные кавычки внутри строк с двойными кавычками, что означает, что такие вещи, как \t, не находятся внутри строк, что является незаконным.

abarnert 27.03.2018 07:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
67
1

Ответы 1

У вас много проблем в опубликованном коде, но вы спрашиваете о следующем:

c.execute(".separator "\t"")

Это недопустимый синтаксис Python. Но даже если вы это исправите, это не действительный SQL.

«Точечные команды» - это специальные команды для sqlite3оболочка командной строки. Он перехватывает их и использует для настройки. Они ничего не значат для реальной базы данных и не могут использоваться из Python.

И большинство из них в любом случае не имеют смысла вне этой оболочки. Например, вы пытаетесь установить здесь разделитель столбцов. Но база данных не возвращает строки, она возвращает объекты строк - аналогично спискам. Разделитель использовать негде. Если вы хотите распечатать строки с разделителями табуляции, вы должны сделать это в ваших собственных операторах print.

Итак, простое решение - удалить все эти точечные команды.

Однако есть проблема - по крайней мере одна из этих точечных команд действительно что-то делает:

c.execute(".import  %\"s\" data_node") % node_info

Вам нужно будет заменить это действительными вызовами библиотеки, которые делают то же самое, что и точка-команда .import. Прочтите, что он делает, и это должно быть легко понять. (Вы в основном хотите открыть файл, проанализировать столбцы для каждой строки и выполнить executemany на INSERT со строками.)

Другие вопросы по теме