无法将数据框附加到sqlite3中

时间:2017-09-30 21:10:19

标签: python sql python-3.x sqlite pandas

我正在尝试将数据框插入sqlite。我现有的数据框如下:

---------------------------------------
   |date        |location|location_code|
---------------------------------------
0  |12/14/2016  | FL     | 2
1  |12/15/2016  | NY     | 3

我的python 3代码:

import sqlite3

conn = sqlite3.connect('transaction.sqlite')
cur = conn.cursor()

cur.executescript('''
    DROP TABLE IF EXISTS New;

    CREATE TABLE New (
        index  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
        date   TEXT,
        location TEXT,
        location_code INTEGER)
''')

df.to_sql("Records", conn, if_exists="append")

conn.commit()
conn.close()

当我运行代码时,出现以下错误:

Traceback (most recent call last):
  File "C:/dbtest.py", line 15, in <module>
    ''')
sqlite3.OperationalError: near "index": syntax error

我知道当我将单词索引更改为另一个单词时,它可以正常工作。

但是,我在数据库浏览器中为sqlite创建一个名为index的字段没有问题。

2 个答案:

答案 0 :(得分:1)

正如您所注意到的那样,index是一个保留字,您不能将它用作列名,至少不是原样 - 您必须使用双引号将其转义({{ 1}}):

"

数据库浏览器可能会自动转义名称,允许您通过保留字调用您在其中创建的列。

答案 1 :(得分:0)

indexreserved keyword。您需要引用它才能成为标识符:

CREATE TABLE New (
    "index"  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    date     TEXT,
    location TEXT,
    location_code INTEGER)

来自关键词文档:

  

如果要使用关键字作为名称,则需要引用它。 SQLite中有四种引用关键字的方法:

     

'keyword'
  单引号中的关键字是字符串文字。

     

"keyword"
  双引号中的关键字是标识符。

     

[keyword]
  方括号中的关键字是标识符。这不是标准的SQL。此引用机制由MS Access和SQL Server使用,并包含在SQLite中以实现兼容性。

     

`keyword`
  用严重重音符号(ASCII代码96)括起来的关键字是标识符。这不是标准的SQL。这种引用机制由MySQL使用,并且包含在SQLite中以实现兼容性。

GUI客户端在生成SQL以创建表时通常会为您引用标识符。