MYSQL是否可以创建表(如果存在)并返回0或1 Python
我使用Python读取MySQL数据库是否包含特定的表 我目前有以下代码:MYSQL是否可以创建表(如果存在)并返回0或1 Python,python,mysql,Python,Mysql,我使用Python读取MySQL数据库是否包含特定的表 我目前有以下代码: cur.execute("SHOW TABLES LIKE hello123") table_found = cur.fetchone() if table_found: # if table is found immediately start cupdate current operation do_task() else: sql_create = "CREATE TA
cur.execute("SHOW TABLES LIKE hello123")
table_found = cur.fetchone()
if table_found: # if table is found immediately start cupdate current operation
do_task()
else:
sql_create = "CREATE TABLE IF NOT EXISTS hello123 (Serial VARCHAR(30), Quantity INT(11),ID INT(11) NULL, Status VARCHAR(30))"
cur.execute(sql_create)
try:
data = pd.read_csv(file_name,header=0,sep=",")
for col in data.itertuples():
cur = conn.cursor()
sql_insert = "INSERT INTO hello123 (Serial,Quantity,ID,Status) VALUES(%s, %s,%s,%s)"
cur.execute(sql_insert, (col[1],col[2],col[3],"IDLE"))
do_task()
return
except FileNotFoundError:
print("file is not found in CSV file")
return
我想知道是否有可能进一步简化这一点,而不是使用“SHOW TABLES like hello123”检查表是否存在,而是使用单个mysql查询创建表(如果不存在)
我的想法是:
sql_create = "CREATE TABLE IF NOT EXISTS hello123 (Serial VARCHAR(30), Quantity INT(11),ID INT(11) NULL, Status VARCHAR(30))"
cur.execute(sql_create)
query_result = cur.fetchone()
if(query_result == FALSE):
# dont need to create table, do task immediately
do_task()
else:
# table created, insert values into table and do task
try:
data = pd.read_csv(file_name,header=0,sep=",")
for col in data.itertuples():
cur = conn.cursor()
sql_insert = "INSERT INTO hello123 (Serial,Quantity,ID,Status) VALUES(%s, %s,%s,%s)"
cur.execute(sql_insert, (col[1],col[2],col[3],"IDLE"))
do_task()
有人能澄清一下,如果不存在,
CREATE TABLE IF NOT EXISTS
query,这样做是否可行吗?真正的问题是如何只将数据插入到新表中?还是空桌子?因为createtable IF NOT EXISTS
已经执行了它所说的操作。它不需要SHOW
您可以使用INSERT IGNORE
只插入不重复的行。创建表后,您可以检查表的COUNT(*)
,并且仅在表为空时插入行。不要忘记考虑表可能存在,但其结构可能不同-您会发现表存在,但插入将失败。@PanagiotisKanavos Hello。当我使用SHOW table时,当找到该表时,我会立即启动任务,但是,如果我不使用SHOW table,而如果不存在该表,则只使用create table,如果该表已经存在,则仍然会插入我希望避免的重复数据。我的主要目标是减少查询的数量并使其尽可能高效。我已经尝试了您建议的INSERT IGNORE方法,但是,我认为它在我的情况下不起作用。表的内容可能会更改,但是,如果表存在,只要有内容,我仍然不想插入任何内容。仅当内容未更改时,“插入忽略”才起作用