2016-05-21 9 views
2

単にpythonとsqliteを使ってデータベースにテーブルを作成します。しかし、私は自分のdb名がユーザによって与えられる必要があります。 sqlite3、python、CREATE TABLE - "/"の近くに構文エラーがあります

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sqlite3 as sqlite 
import sys, os 
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 


def create_table(dbname): 
     sql = '''\ 
        CREATE TABLE IF NOT EXISTS ''' + dbname + ''' (
         ID INTEGER PRIMARY KEY NOT NULL, 
         FIRSTNAME TEXT, 
         LASTNAME TEXT, 
         ACADEMIC_DEGREE TEXT, 
         DISCIPLINE TEXT 
       ''' 

     connection = sqlite.connect(dbname, check_same_thread=False) 
     try: 
      with connection: 
       cursor = connection.cursor() 
       try: 
        cursor.execute(sql) 
       except sqlite.DatabaseError, dbe: 
        print dbe 
     finally: 
      connection.close() 

tmp = os.path.split(os.path.dirname(os.path.abspath(__file__))) 
path = os.path.join(tmp[0], 'researchers.sql') 
create_table(path) 

は、しかし、私のコードは、テーブルを作成しませんが、私だけのエラーメッセージを表示します。:私はこれを行うために管理 near "/": syntax errorが。このコードで何が問題になっていますか? Pythonの構文エラーはどこで言及されていますか?これを解決する方法は?

このコードでは、働いていた:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sqlite3 as sqlite 
import sys, os 
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 


def create_table(dbname): 
     sql = ''' 
        CREATE TABLE IF NOT EXISTS ''' + str(dbname.split('.')[0]) + ''' (
         ID INTEGER PRIMARY KEY NOT NULL, 
         FIRSTNAME TEXT, 
         LASTNAME TEXT, 
         ACADEMIC_DEGREE TEXT, 
         DISCIPLINE TEXT 
        ) 
       ''' 

     connection = sqlite.connect(dbname, check_same_thread=False) 
     try: 
      with connection: 
       cursor = connection.cursor() 
       try: 
        cursor.execute(sql) 
       except sqlite.DatabaseError, dbe: 
        print dbe 
     finally: 
      connection.close() 

create_table('researchers.sql') 
+1

あなたの 'CREATE TABLE'文が閉じているようには見えませんが、エラーは' '' ''内の最初の文字から来ています。 –

答えて

1

これにsql変数を置き換えます。

1

テーブル名が、それには確かにない/を任意の文字を持つことができませんので、あなたはcreate_table(path)できません。 「研究者」などの単純なテーブル名を選択します。

関連する問題