无法使用 Python 和 PHPMyAdmin 将删除的表重新创建到任何 MySQL 数据库

Can't recreate dropped tables to any MySQL database using Python and PHPMyAdmin

我们的 class 有一项任务是在数据库中创建 3 个表,使用 PyCharm 编写 .py 代码并使用 PHPMyAdmin 查看所述表。

我第一次尝试通过 Python 编程就能够在我的数据库中创建这三个表。但是,我们的编程教授要求我们对输出进行屏幕记录,所以我放下了表格并尝试重新 运行 我的 .py 文件并重新创建它们,以便我可以在屏幕记录中显示我的 .py 代码工作,但他们不会创造。我试过了:

  1. 更改数据库的名称
  2. 更改表的名称
  3. 正在测试数据库上创建表,但未创建表。

我的代码进行了尝试,但如果恰好交叉一个,则显示 SQL 错误,但在上述所有情况下,SQL 查询均显示为成功。然而,当我检查 PHPMyAdmin 中的表以验证数据库 returns 0 个表。

这是我的连接文件

import mysql.connector  # allows to connect to db
from mysql.connector import Error  # easily get error

try:
    conx = mysql.connector.connect(host='127.0.0.1', database="_dbmidtermlab_maceren", user='root', password='')
    if conx.is_connected():
        db_info = conx.get_server_info()  # get info about sql server
        print("Connected to MYSQL Server Version: ", db_info)
        cursor = conx.cursor()
        cursor.execute("select database();")
        db = cursor.fetchone()
        print("You're connected to database: ", db)
except Error as e:
    print("Error connecting to MYSQL", e)

我的创建表文件

from conn import conx
from mysql.connector import Error

try:
    createTable = """CREATE TABLE Order (OrderNum varchar(5) NOT NULL ,OrderDate date NULL,CustomerNum VARCHAR(3) NULL, PRIMARY KEY (OrderNum)); 
                     CREATE TABLE Parts (PartNum varchar(4) NOT NULL ,Description varchar(15) NULL,onHand decimal(4,0) NULL, Class varchar(2) NULL,Warehouse varchar(1) NULL, Price decimal(6,2) NULL, PRIMARY KEY (PartNum)); 
                     CREATE TABLE Customers (CustomerNum varchar(3) NOT NULL ,CustomerName varchar(35) NOT NULL,Street varchar(15) NULL, City varchar(15) NULL,State varchar(2) NULL, Zip varchar(5) NULL,  Balance decimal(8,2) NULL,  CreditLimit decimal(8,2) NULL,  RepNum varchar(2) NULL, PRIMARY KEY (CustomerNum)); """
    cursor = conx.cursor() #cursor allows to execute query (simiplay to mysqli_query())
    result = cursor.execute(createTable, multi=True)
    conx.commit()
    #multi=True allows multiple queries in one variable

    print("Tables created successfully")
except Error as error:
    print("Failed to create table in MySQL: {}".format(error))
#finally:
 #   if conx.is_connected():
  #      cursor.close()
   ##    print("MySQL connection is closed")

根据我在 Google 上搜索到的内容,显然删除表格不是一个好主意。它以某种方式影响了功能?我该怎么办?

问题是,如果使用的名称是保留关键字,MySQL 需要标识符的反引号。在这种情况下 table name Order 是保留关键字(即 sql order by...)因此您必须在 Order 周围使用反引号,即:

CREATE TABLE `Order` (OrderNum varchar(5) NOT NULL, OrderDate date NULL, CustomerNum VARCHAR(3) NULL, PRIMARY KEY (OrderNum)); 

为了将来更容易追踪类似的问题,我建议您分别执行 SQL DDL 语句,即每个 create table ...[=14 一个 cursor.execute =]

非常感谢@Barmar 和@IODEV!

是什么解决了我的问题:

  1. 按照@Barmar
  2. 的建议分离我的 CREATE TABLE 查询
  3. 按照@IODEV
  4. 的建议将``添加到ORDER table

仍然想知道为什么我的多查询第一次成功了,后来却出了问题,但现在,我的项目终于成功了!谢谢!