Can';t使用Python和PHPMyAdmin将删除的表重新创建到任何MySQL数据库

Can';t使用Python和PHPMyAdmin将删除的表重新创建到任何MySQL数据库,python,mysql,phpmyadmin,pycharm,Python,Mysql,Phpmyadmin,Pycharm,我们班有一个任务,在数据库中创建3个表,使用PyCharm对.py代码进行编程,并使用PHPMyAdmin查看所述表 第一次尝试时,我就能够通过Python编程在数据库中创建三个表。然而,我们的编程教授要求我们对输出进行屏幕记录,因此我放弃了我的表,尝试重新运行我的.py文件并重新创建它们,以便在屏幕记录中显示我的.py代码可以工作,但它们不会创建。我试过: 更改数据库的名称 更改表的名称 正在测试数据库上创建表,但未创建表 我的代码有一个尝试,除了如果恰好交叉出现一个SQL错误,则会显示一个S

我们班有一个任务,在数据库中创建3个表,使用PyCharm对.py代码进行编程,并使用PHPMyAdmin查看所述表

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

  • 更改数据库的名称
  • 更改表的名称
  • 正在测试数据库上创建表,但未创建表
  • 我的代码有一个尝试,除了如果恰好交叉出现一个SQL错误,则会显示一个SQL错误,但是在上述所有情况下,SQL查询都显示是成功的。但是,当我检查PHPMyAdmin中的表进行验证时,数据库返回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")
    

    根据我在谷歌上搜索的结果,显然丢掉桌子是个坏主意。它以某种方式影响了功能?我该怎么办?

    问题是,如果使用的名称是保留关键字,MySQL需要使用反勾号作为标识符。在这种情况下,表名顺序是一个保留关键字(即sql Order by…),因此必须在
    Order
    ie:

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

    为了便于将来跟踪类似问题,我建议您单独执行SQL DDL语句,即一个
    游标。为每个
    创建表执行

    非常感谢@Barmar和@IODEV

    是什么解决了我的问题:

  • 按照@Barmar的建议分离我的创建表查询
  • 按照@IODEV的建议将``添加到订单表中

  • 仍然想知道为什么我的多重查询第一次成功,后来又失败了,但现在,我的项目终于成功了!谢谢大家!

    他们为什么不创造呢?你有错误吗?错误是什么?显示您的代码。如果您有代码重新创建表,则删除这些表应该不会有问题。@Barmar添加了代码。我的代码有一个尝试,除了如果恰好交叉出现一个SQL错误,则会显示一个SQL错误,但是在我上面尝试过的所有情况下,SQL查询都显示是成功的。但是,当我在PHPMyAdmin中检查表以进行验证时,数据库返回0个表。如果在MySQL Workbench中运行“create table”语句,会发生什么情况?尝试将它们作为单独的查询来执行,而不是使用
    multi=True
    您真的需要同时执行这两种操作吗?