如何使用Python备份 MySQL 数据库?
在本文中,我们将学习如何使用Python备份 MySQL 数据库。
使用的数据库:
需要Python模块:
在这篇文章中,我们将使用Python的 mysql-connector 模块来备份我们的数据。您可以使用以下命令安装 mysql-connector:
pip install mysql-connector
备份数据库:
因此,备份我们的数据库是一项相当简单的任务。
我们要做的是,首先,使用 mysql-connector 模块创建与数据库(我们要备份的)的连接。然后我们将创建一个通过该连接获得的游标对象的实例。然后我们将首先使用 SQL 的“SHOW TABLES”命令获取所有表名,并执行游标对象的方法。
例子:
Python3
import mysql.connector as m
# database which you want to backup
db = 'geeksforgeeks'
connection = m.connect(host='localhost', user='root',
password='123', database=db)
cursor = connection.cursor()
# Getting all the table names
cursor.execute('SHOW TABLES;')
table_names = []
for record in cursor.fetchall():
table_names.append(record[0])
Python3
backup_dbname = db + '_backup'
try:
cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
pass
Python3
cursor.execute(f'USE {backup_dbname}')
Python3
for table_name in table_names:
cursor.execute(
f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')
Python3
import mysql.connector as m
# database which you want to backup
db = 'geeksforgeeks'
connection = m.connect(host='localhost', user='root',
password='123', database=db)
cursor = connection.cursor()
# Getting all the table names
cursor.execute('SHOW TABLES;')
table_names = []
for record in cursor.fetchall():
table_names.append(record[0])
backup_dbname = db + '_backup'
try:
cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
pass
cursor.execute(f'USE {backup_dbname}')
for table_name in table_names:
cursor.execute(
f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')
注意: cursor.fetchall() 方法返回一个以表名作为元素的元组列表。我们正在运行一个 for 循环并将该元组的第一个元素(这是我们的表名)存储在我们的列表中,以便获得一个包含所有表名的简单列表。
然后我们将使用 SQL 和游标对象的“CREATE”命令创建我们的备份数据库。我们将在 try 块中执行此操作,这样如果创建的数据库已经存在,则不会返回任何错误。上面的代码如下所示:
Python3
backup_dbname = db + '_backup'
try:
cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
pass
这将创建我们的备份数据库。现在我们将简单地运行带有游标对象的“USE”命令来使用backup_dbname数据库而不是我们当前的数据库。
Python3
cursor.execute(f'USE {backup_dbname}')
这会将我们当前的数据库更改为 backup_dbname。因此,在 SQL 中,当我们运行以下命令时,我们可以将 table1 的副本创建到新创建的 table2 中。
CREATE TABLE table2 SELECT * FROM table1;
所以,我们将在我们的Python代码中做的是,我们将对所有表名运行一个 for 循环,并为该表名执行一个“CREATE”命令(并确保我们现在使用 backup_dbname 作为我们当前的数据库并且它目前还没有任何表),我们将创建一个类似于上面的查询并将表复制到新创建的表中。
代码是:
Python3
for table_name in table_names:
cursor.execute(
f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')
请注意,我们通过 {db}.{table_name} 引用原始表,因为它存在于另一个数据库中,因为我们当前的数据库是 backup_dbname。
所以,我们的代码的全貌是这样的:
Python3
import mysql.connector as m
# database which you want to backup
db = 'geeksforgeeks'
connection = m.connect(host='localhost', user='root',
password='123', database=db)
cursor = connection.cursor()
# Getting all the table names
cursor.execute('SHOW TABLES;')
table_names = []
for record in cursor.fetchall():
table_names.append(record[0])
backup_dbname = db + '_backup'
try:
cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
pass
cursor.execute(f'USE {backup_dbname}')
for table_name in table_names:
cursor.execute(
f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')
运行这段代码,我们创建了包含所有表和数据的备份数据库。 geeksforgeeks_backup 数据库(我们在此过程中创建)如下所示: