Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法运行';执行(sqlcmd)和#x27;使用Python、Ubuntu和_Python_Sqlite_Ubuntu 16.04 - Fatal编程技术网

无法运行';执行(sqlcmd)和#x27;使用Python、Ubuntu和

无法运行';执行(sqlcmd)和#x27;使用Python、Ubuntu和,python,sqlite,ubuntu-16.04,Python,Sqlite,Ubuntu 16.04,我想用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(".se

我想用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.”:语法错误
。因此,如何更改我的代码以及其他命令(如
创建表
)中是否存在其他错误?

发布的代码中存在许多问题,但您要问的问题是:

c.execute(".separator "\t"")
这不是有效的Python语法。但是,即使你解决了这个问题,也不是

“点命令”是指向
sqlite3
的特殊命令。它拦截它们并使用它们来配置自己。它们对实际数据库没有任何意义,不能从Python中使用

而且他们中的大多数人在这个外壳之外没有任何意义。例如,您试图在此处设置列分隔符。但是数据库不返回字符串,它返回类似于列表的行对象。没有地方可以使用分离器。如果要使用制表符分隔符打印行,则必须在自己的
print
语句中执行此操作

因此,简单的解决方法是删除所有这些点命令

但是,存在一个问题,这些点命令中至少有一个实际起作用:

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

您必须替换对库的有效调用,这些调用与
.import
dot命令的操作相同。阅读它的功能,应该很容易理解。(您基本上希望打开文件,解析每行的列,并对插入的行执行
executemany

请提供完整的回溯,而不仅仅是异常的简短描述。这将告诉我们这许多行SQL中的哪一行失败了,以及它在字符串中抱怨的地方。另外,您如何知道“这些SQL命令是正确的”?实际上,粘贴后,它从Python中获得了一个
SyntaxError
,根本不会运行。您在双引号字符串中有未转义的双引号,这意味着像
\t
这样的东西不在字符串中,这是非法的。