如果在MySQLdb中不存在,则创建表吗?语法?

问题描述 投票:5回答:5

我创建了一个表“ table2”,并在运行代码时收到警告(表已存在)。我只想创建不存在的表。一些研究MySQL syntax website在MySQL中发现以下内容:如果不存在,则创建表

我的代码:

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.54-1ubuntu4谢谢汤姆

python mysql-python
5个回答
5
投票

mysql语法为

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

使用以下...

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

结果:

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

4
投票

CREATE TABLE命令的语法有两个问题。

  1. 您具有表名after列定义。应该将它们放在它们前面,如下所示:

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

  2. 其次,您正在使用2作为列名,但我不确定2甚至不是有效的列名。如果是的话,应该用引号将其与普通整数区分开。

您可以在CREATE TABLE上阅读有关MySQL documentation语法的更多信息。


2
投票

首先,请使用the official reference,而不是一些随机位置。该文档几乎可以肯定会好很多。其次,您可能更接近以下意思:

CREATE TABLE IF NOT EXISTS table2 (columnname INT);

1
投票

问题出在您的sql语法上。 CREATE TABLE语句的正确语法会将表名放在列之前。此外,2 INT不是有效的列定义。如果您要使列的名称为“ 2”,则必须使用引号,例如

`2` INT

或者(如果(更可能是)您希望使用两位十进制数字的列,则将长度放在数据类型之后;该列仍必须命名:foo_column int(2)

总共,您想要

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

0
投票
import sqlite3
connexion = sqlite3.connect("bd-celebrites.sq3")
curseur = connexion.cursor()
curseur.execute("CREATE TABLE IF NOT EXISTS celebrites (nom TEXT, prenom TEXT, annee INTEGER)")
© www.soinside.com 2019 - 2024. All rights reserved.