sqlite主键创建表错误

时间:2016-03-20 23:07:07

标签: python database sqlite

import sqlite3

# set database variables
sqlite_db_filename = '/samba/anonymous/vacuum_control.sqlite'
table_name = 'user_recipe'
new_field_1 = 'recipe_id'
field_type_1 = 'INTEGER PRIMARY KEY'
new_field_2 = 'recipe_name'
field_type_2 = 'TEXT'
new_field_3 = 'use_vacuum'
field_type_3 = 'INTEGER'


# Connecting to the database file
conn = sqlite3.connect(sqlite_db_filename)
c = conn.cursor()

# Creating a new SQLite table with x columns

c.execute('CREATE TABLE {tn} ({nf1} {ft1} {nf2} {ft2})'\
    .format(tn=table_name, nf1=new_field_1, ft1=field_type_1, nf2=new_field_2, ft2=field_type_2))

# Committing changes and closing the connection to the database file
conn.commit()

问题

当前代码产生错误

"Traceback (most recent call last):
  File "data_base_config.py", line 20, in <module>
    .format(tn=table_name, nf1=new_field_1, ft1=field_type_1, nf2=new_field_2, ft2=field_type_2))
sqlite3.OperationalError: near "recipe_name": syntax error"

如果我将field_type_1更改为"INTEGER",则可以正常使用。我已经查看了许多其他示例,包含INTEGER PRIMARY KEY

似乎是有效的

SQLite版本3.8.7.1

由于

2 个答案:

答案 0 :(得分:2)

您在{ft1}之后缺少逗号:

c.execute('CREATE TABLE {tn} ({nf1} {ft1}, {nf2} {ft2})'\

答案 1 :(得分:0)

我不确定,如果您只想将列设置为主键,那么我建议使用此语法。

    # Creating a second table with 1 column and set it as PRIMARY KEY
    # note that PRIMARY KEY column must consist of unique values!
    c.execute('CREATE TABLE {tn} ({nf} {ft} PRIMARY KEY)'\
            .format(tn=table_name2, nf=new_field, ft=field_type))

您可以看到此示例here