繁体   English   中英

无法将数据框附加到sqlite3

[英]Unable to append dataframe into sqlite3

我正在尝试将数据框插入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的字段的问题。

如您所见, index是一个保留字,您不能将其用作列名,至少不能原样使用-您必须使用双引号( " )对其进行转义:

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)
''')

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

index保留关键字 您需要引用它才能使其成为标识符:

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创建表时通常会为您引用标识符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM