2012-01-20 11 views
3

私は自分のコードを実行するときにテーブル "table2"を作成し、警告(テーブルは既に存在します)を取得しました。 テーブルが存在しない場合にのみ作成します。 いくつかの研究MySQL syntax websiteは、MySQLで、次のターンアップ:MySQLdbで既存のものが存在しない場合、CREATE TABLEは動作しますか?構文?

cursor.execute('CREATE TABLE IF NOT EXISTS (2 INT)`table2`') 

は、この警告を提供します:

_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(2 INT)`table2`' at line 1") 

は、私はデータベースのバージョンのデータベースのバージョンを持っている:5.1、NOTは

私のコードを存在する場合、テーブルを作成します。 54-1ubuntu4 Thanks-Tom

+1

"2"という名前の列を作成するのは本当ですか? –

答えて

4

0123の構文にはいくつかの問題がありますコマンド。

  1. あなたは列定義の後にテーブル名を持っています。

    CREATE TABLE IF NOT EXISTS table2 (<column definitions>);

  2. 第二に、あなたが列名として2を使用しているが、私は2も有効な列名であることはよく分からない:それはこのように、彼らの前に配置する必要があります。そうであれば、それを平易な整数と区別するために引用符で囲む必要があります。

あなたはMySQL documentationCREATE TABLE構文の詳細を読むことができます。

1

まず、the official referenceを使用し、ランダムなサイトを使用しないでください。ドキュメントはずっと良くなっています。次に、近くにあるものを意味していた可能性があります。

CREATE TABLE IF NOT EXISTS table2 (columnname INT); 
1

問題はSQL構文にあります。 CREATE TABLEステートメントの正しい構文は、列の前にテーブル名を置きます。さらに、2 INTは有効な列定義ではありません。カラムは「2」、それはあなたが2桁の10進数の列をしたい

`2` INT 

か(可能性が高い)の場合のように名前を引用符で囲む必要があります持っているあなたが意味する場合、その長さは、データ型の後に置かれています。列には、まだ名前を指定する必要があります。foo_column int(2)

だから完全に、あなたは

cursor.execute(''' 
    CREATE TABLE IF NOT EXISTS table2 (
     foo_column INT(2)) 
    ''') 
3

MySQLの構文は以下の...

cursor.execute('CREATE TABLE IF NOT EXISTS `table2` (`something` int(2))') 

結果を使用して

CREATE TABLE [IF NOT EXISTS] tbl_name 
    (create_definition,...) 
    [table_options] 
    [partition_options] 

ありたいです:

__main__:1: Warning: Table 'table2' already exists 
+1

ありがとうございました!どのように警告を殺すのですか? – Tom

+4

は 'import warnings'を行い、その後' warnings.filterwarnings( 'ignore') ' – Landon

関連する問題