在sqlite3中插入带有空格的列名称

时间:2019-10-06 23:11:33

标签: python-3.x sqlite

我试图用存储在字典中的数据用Python3填充sqlite3数据库。我的代码中的问题似乎在此代码段中。

matchlist=['id','handicap','goal line','corner line']
heads='"'+'","'.join([a for a in list(match.keys()) if a in matchlist])+'"'
llaves=':'+',:'.join([a for a in list(match.keys()) if a in matchlist])

cur.execute('''INSERT or IGNORE INTO preodds ({}) VALUES ({});'''.format(heads,llaves),
            match)

这使我在行旁边出现操作错误。

显然,当您尝试在名称中包含空格的列中插入时,需要“转义”它们。为此,我还修改了我的llaves字符串,方法如下:

llaves='":'+'",":'.join([a for a in list(match.keys()) if a in matchlist])+'"'

这样做可以解决我的问题,但不是用dict提供的值填充表,而是用llaves字符串中的文字值填充。

这是为什么?更重要的是,如果我有一个表格,其中各列的空格都为空白,那么如何使用dict数据填充行?

1 个答案:

答案 0 :(得分:0)

您的原始代码可能会产生此结果

SELECT COUNT(*) ...

请注意参数名称中的空格...以冒号(INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line") VALUES (:id,:handicap,:goal line,:corner line) 开头的名称。那是问题。

您尝试的解决方案只是将字符串文字作为值提交,因此正是所插入的内容。

:

引号可用于分隔对象名称,但是在其他情况下,引号被解释为文字字符串值定界符here找到了确定其如何解释引用的值的精确规则。

据我所知,参数无法转义,因此不能包含空格或其他特殊字符,至少没有任何记载。参见sqlite docs

如果要动态构建参数列表,则应从参数名称中删除所有空格。或者,您可以只使用带有INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line") VALUES (":id",":handicap",":goal line",":corner line") 字符的未命名参数。不管哪种方式,参数都按照它们出现的顺序分配值,因此不会有任何区别。

类似的东西:

?

INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line")
 VALUES (:id,:handicap,:goalline,:cornerline)
相关问题