You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量导出AdventureWorks2019数据库所有表为同名CSV文件

问题描述

以下代码用于从数据库中单次导出一张表为CSV格式:

import pandas as pd
import pyodbc 

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=DESKTOP-0LA566U\SQLEXPRESS;'
                      'Database=AdventureWorksDW2019;'
                      'Trusted_Connection=yes;')

sql_query = pd.read_sql_query('''
                                select * from DimAccount'''
                              ,conn)
    
df = pd.DataFrame(sql_query)
df.to_csv (r'C:\Users\cdtpr\OneDrive\Desktop\connections\DimAccount.csv', index = False)

如上代码仅支持单次导出一张表为CSV格式,例如示例中导出了DimAccount表。目前只能逐个导出表,想一次性将AdventureWorksDW2019数据库中的30张表全部以表名命名导出为CSV格式,求实现方法。


实现方法

要批量导出所有用户表,核心逻辑是先获取数据库中所有用户自定义表的名称,再循环遍历每个表执行导出操作。以下是完整可运行的代码:

import pandas as pd
import pyodbc
import os

# 数据库连接配置
conn_params = {
    'Driver': '{SQL Server}',
    'Server': 'DESKTOP-0LA566U\\SQLEXPRESS',
    'Database': 'AdventureWorksDW2019',
    'Trusted_Connection': 'yes'
}

# CSV导出目录(自动创建不存在的目录)
output_dir = r'C:\Users\cdtpr\OneDrive\Desktop\connections\\'
os.makedirs(output_dir, exist_ok=True)

# 建立数据库连接
conn = pyodbc.connect(**conn_params)
cursor = conn.cursor()

# 查询当前数据库下所有用户表的完整名称(含架构)
cursor.execute("""
    SELECT CONCAT(s.name, '.', t.name) AS full_table_name
    FROM sys.tables t
    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    WHERE t.type = 'U'  -- 仅筛选用户表,排除系统表
""")

# 提取所有表名
tables = [row.full_table_name for row in cursor.fetchall()]

# 循环导出每个表为CSV
for table in tables:
    # 读取表数据
    df = pd.read_sql_query(f"SELECT * FROM {table}", conn)
    # 处理文件名:将架构与表名的分隔符替换为下划线,避免路径非法字符
    csv_name = f"{table.replace('.', '_')}.csv"
    # 导出CSV
    df.to_csv(os.path.join(output_dir, csv_name), index=False, encoding='utf-8-sig')
    print(f"完成导出: {table} -> {csv_name}")

# 关闭数据库连接
cursor.close()
conn.close()

关键细节说明

  • 获取表名:通过查询sys.tables和sys.schemas系统视图,精准筛选用户创建的表(t.type = 'U'),避免导出系统表;若不需要架构前缀,直接取t.name即可。
  • 目录自动创建:使用os.makedirs(output_dir, exist_ok=True)确保导出目录存在,无需手动创建。
  • 编码与乱码:指定encoding='utf-8-sig'导出,解决Excel打开CSV时的中文乱码问题。
  • 文件名处理:将表名中的.(架构分隔符)替换为_,避免生成非法文件名。

内容的提问来源于stack exchange,提问作者Krishna Menon Kaul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:45:27