# 获取游标 cursor = conn.cursor() # 获取所有表名 cursor.execute("show tables") tables = cursor.fetchall() # 遍历每张表格 for table in tables: table_name = table[0] # 查询表格中所有列名 cursor.execute(f"select column_name from information_schema.columns where table_name='{table_name}'") columns = cursor.fetchall() # 判断a和b列是否存在 if ('a',) in columns and ('b',) in columns: continue # 如果a和b列不存在,则增加这两列 cursor.execute(f"alter table `{table_name}` add column a decimal(10,2), add column b decimal(10,2)") # 提交修改并关闭连接 conn.commit() conn.close() 给代码增加多线程
时间: 2024-01-11 13:06:09 浏览: 75
数据库查询操作模板代码.rar
好的,可以使用Python内置的`concurrent.futures`库来实现多线程。代码修改如下:
```python
import pymysql
import concurrent.futures
# 建立连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='daily')
# 获取所有表名的函数
def get_tables():
cursor = conn.cursor()
cursor.execute("show tables")
tables = cursor.fetchall()
cursor.close()
return tables
# 遍历每张表格的函数
def process_table(table_name):
cursor = conn.cursor()
cursor.execute(f"select column_name from information_schema.columns where table_name='{table_name}'")
columns = cursor.fetchall()
if ('a',) in columns and ('b',) in columns:
cursor.close()
return
cursor.execute(f"alter table `{table_name}` add column a decimal(10,2), add column b decimal(10,2)")
cursor.close()
# 使用多线程处理所有表格
with concurrent.futures.ThreadPoolExecutor() as executor:
tables = get_tables()
futures = [executor.submit(process_table, table[0]) for table in tables]
concurrent.futures.wait(futures)
# 提交修改并关闭连接
conn.commit()
conn.close()
```
这段代码使用`get_tables`函数获取所有表名,使用`process_table`函数处理每张表格。然后使用`ThreadPoolExecutor`创建线程池,并发地调用`process_table`函数处理每张表格。最后提交修改并关闭连接。
多线程可以提高程序的并发性和效率,但需要注意线程安全问题,比如避免多个线程同时访问同一个数据库连接。
阅读全文