2015-10-17 93 views
0

我想创建一个方法,如果不存在,创建一个表。sqlite3 - 错误CREATE TABLE语法

当我尝试执行此方法,它返回sqlite3.OperationalError: near "TEXT": syntax error

的方法:

def create_table_if_exists(self): 
    self.conn.execute(
     'CREATE TABLE IF NOT EXISTS products(NAME TEXT, URL TEXT, ' 
     'ESHOP1 TEXT, CENA1 TEXT, DOPRAVA1 TEXT, STAV1 TEXT, ' 
     'ESHOP2 TEXT, CENA2 TEXT, DOPRAVA2 TEXT, STAV2 TEXT, ' 
     'ESHOP3 TEXT, CENA3 TEXT, DOPRAVA3 TEXT, STAV3 TEXT, ' 
     'ESHOP4 TEXT, CENA4 TEXT, DOPRAVA4 TEXT, STAV4 TEXT, ' 
     'ESHOP5 TEXT, CENA5 TEXT, DOPRAVA5 TEXT, STAV5 TEXT') 
    self.conn.commit() 

错误:

'CREATE TABLE IF NOT EXISTS products(NAME TEXT, URL TEXT, ' 
sqlite3.OperationalError: near "TEXT": syntax error 

我不知道哪里可能是问题。你有什么建议吗?

+3

SQL在列列表后缺少关闭')'。 –

+0

@JonathanLonowski谢谢乔纳森。你是对的。现在,这是正确的。但它表现为错误在顶线...... –

+0

任何带有像'foo1,foo2,foo3'这样的列的表都相当可疑,并且建议需要一个连接表。我也会问一个关于这个问题。 – Schwern

回答

0

问题是最后失踪的关闭paren。出于某种原因,错误是仅向您显示查询的第一行。

对于多行字符串,我建议使用multi-line ''' quotes使其更容易阅读。那么,加上你的SQL语句的正确缩进,将会避免将来出现这种类型的语法错误。

def create_table_if_exists(self): 
    self.conn.execute(conn.execute(''' 
     CREATE TABLE IF NOT EXISTS products(
      NAME TEXT, 
      URL TEXT, 
      ESHOP1 TEXT, CENA1 TEXT, DOPRAVA1 TEXT, STAV1 TEXT, 
      ESHOP2 TEXT, CENA2 TEXT, DOPRAVA2 TEXT, STAV2 TEXT, 
      ESHOP3 TEXT, CENA3 TEXT, DOPRAVA3 TEXT, STAV3 TEXT, 
      ESHOP4 TEXT, CENA4 TEXT, DOPRAVA4 TEXT, STAV4 TEXT, 
      ESHOP5 TEXT, CENA5 TEXT, DOPRAVA5 TEXT, STAV5 TEXT 
     ) 
    ''') 
    self.conn.commit()