Table 未创建,即使在验证 table 存在之后

Table not created, even after validating the table existence

class datalog(display_clock):
    def con_mysql(self):
        cat = mysql.connector.connect(
            host="localhost", user="subramanya", passwd="Sureshbabu@4155", database="CFM")
        if (cat):
            datacursor = cat.cursor()
            todaydate = d
            check_table = (
                "SELECT count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=%s")
            datacursor.execute(check_table, (todaydate,))

            result = datacursor.fetchone()
            if (result):
                self.success_login()
            else:
                datacursor.execute(
                    "CREATE TABLE {today}(Sl_no INT NOT NULL AUTO_INCREMENT PRIMARY KEY,date DATE,Start_time TIME,End_time TIME,Item CHAR(255),Weight FLOAT, Amount INTEGER(10))".format(today=todaydate))
                self.success_login()
        else:
            datacursor.Terminate
            self.error_display.insert(0.0, "Connecting Database failed!!!")

我试图检查今天的日期是否存在 table。 如果不创建相同的。 没有错误发生。但是 table 没有为 sysdate 创建。

欢迎使用 Whosebug!

我相信这里有一个小小的误解。您不需要事先检查 table 是否存在并在之后创建它。大多数当前的数据库技术都接受条件 IF NOT EXISTS on CREATE TABLE CLAUSE.

CREATE TABLE IF NOT EXISTS sales (
    sale_id INT NOT NULL,
);

这意味着 table sales 将仅在之前不存在的情况下创建。

此外,我强烈建议稍微重构一下您的代码。作为建议(请相应地调整您的项目需要):

from datetime import datetime

class Settings:
    # please, avoid hard-coded credentials.
    DB_HOST = "localhost"
    DB_USER = "subramanya"
    DB_PASSWD = "Sureshbabu@4155"
    DB_SCHEMA = "CFM"

class datalog(display_clock):

    def db_connect(self):
        conn = mysql.connector.connect(
            host=Settings.DB_HOST,
            user=Settings.DB_USER,
            passwd=Settings.DB_PASSWD,
            database=Settings.DB_SCHEMA
        )
        if not conn:
            raise Exception("Connecting Database failed!!!")

        return conn

    def ensure_table(self):
        conn = self.db_connect()
        conn.datacursor.execute("""
            CREATE TABLE IF NOT EXISTS `{0}`(
                Sl_no INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                date DATE,
                Start_time TIME,
                End_time TIME,
                Item CHAR(255),
                Weight FLOAT,
                Amount INTEGER(10)
            );
            """.format(datetime.today().strftime('%Y%m%d'))  # format 20200915
        )

    def run(self):
        self.ensure_table()
        self.success_login()

有很多方法可以编写此代码,但请记住,可读性很重要。