python使用多线程和pymysql连接mysql的daily数据库,给每一张表插入两列,列名为a和b,数据类型为小数,如果a和b列已经存在,则跳过该表格的修改
时间: 2024-02-09 19:08:00 浏览: 28
好的,我可以提供以下代码实现你的需求,请确保已经安装了pymysql模块。
```python
import threading
import pymysql
# 连接MySQL数据库
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='password',
database='daily'
)
# 获取游标
cursor = conn.cursor()
# 获取数据库中所有表名
sql = "show tables"
cursor.execute(sql)
tables = cursor.fetchall()
# 定义插入列的SQL语句
alter_sql = "ALTER TABLE {} ADD COLUMN a decimal(10,2), ADD COLUMN b decimal(10,2)"
# 定义查询表结构的SQL语句
desc_sql = "DESC {}"
# 定义判断列是否存在的函数
def check_column_exist(table_name, column_name):
cursor.execute(desc_sql.format(table_name))
columns = cursor.fetchall()
for column in columns:
if column[0] == column_name:
return True
return False
# 定义多线程函数
def insert_columns(table_name):
# 判断a、b列是否已经存在
if check_column_exist(table_name, 'a') and check_column_exist(table_name, 'b'):
print("{}表格已经存在a、b列,跳过修改".format(table_name))
return
# 执行修改表结构的SQL语句
cursor.execute(alter_sql.format(table_name))
conn.commit()
print("{}表格已成功添加a、b列".format(table_name))
# 多线程插入列
threads = []
for table in tables:
table_name = table[0]
t = threading.Thread(target=insert_columns, args=(table_name,))
threads.append(t)
t.start()
# 等待所有线程执行完毕
for t in threads:
t.join()
# 关闭游标和连接
cursor.close()
conn.close()
```
这段代码中,我们首先连接到MySQL数据库,并获取了所有表名。然后定义了两个SQL语句,一个用于修改表结构添加a、b列,另外一个用于查询表结构获取所有列名。在`insert_columns`函数中,我们先判断a、b列是否已经存在,如果存在就跳过该表格的修改。否则,我们就执行修改表结构的SQL语句,添加a、b列。最后,我们使用多线程来并发地插入列,提高代码执行效率。