python 读取mysql数据库的每一张表格,给每张表格增加两列,列名称为a和b,数据类型为小数.,如果a和b列存在则跳过,并且使用多线程
时间: 2023-12-19 11:06:49 浏览: 102
Python如何读取MySQL数据库表数据
可以使用Python中的多线程库`threading`来实现多线程读取MySQL数据库中的每一张表格,并给每张表格增加两列。
首先,需要安装Python的MySQL连接库`pymysql`,可以使用以下命令进行安装:
```python
pip install pymysql
```
然后,可以使用以下代码实现:
```python
import pymysql
import threading
# 定义数据库连接参数
db_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123456',
'database': 'mydb'
}
# 定义增加列的SQL语句
alter_sql = 'ALTER TABLE {} ADD COLUMN a DECIMAL(10, 2) DEFAULT 0.00, ADD COLUMN b DECIMAL(10, 2) DEFAULT 0.00'
# 定义线程类
class AddColumnThread(threading.Thread):
def __init__(self, table_name):
threading.Thread.__init__(self)
self.table_name = table_name
def run(self):
# 建立数据库连接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 判断表格是否已经存在a和b列
cursor.execute('DESCRIBE {}'.format(self.table_name))
columns = [col[0] for col in cursor.fetchall()]
if 'a' in columns and 'b' in columns:
print('Table {} already has column a and b'.format(self.table_name))
else:
# 增加列
cursor.execute(alter_sql.format(self.table_name))
print('Add column a and b to table {}'.format(self.table_name))
# 关闭数据库连接
cursor.close()
conn.close()
if __name__ == '__main__':
# 建立数据库连接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 获取所有表格的名称
cursor.execute('SHOW TABLES')
table_names = [table[0] for table in cursor.fetchall()]
# 关闭数据库连接
cursor.close()
conn.close()
# 创建线程并启动
threads = []
for table_name in table_names:
thread = AddColumnThread(table_name)
thread.start()
threads.append(thread)
# 等待所有线程执行完毕
for thread in threads:
thread.join()
```
上述代码会读取MySQL数据库中的每一张表格,并给每张表格增加两列,列名称为a和b,数据类型为小数。如果a和b列已经存在,则跳过该表格。同时,使用多线程可以加快处理速度。
需要注意的是,在多线程场景下,需要建立多个数据库连接,因此需要在每个线程中单独建立和关闭数据库连接,以免出现连接池满的情况。
阅读全文