【问题标题】:python - export or write to excel ms SQL server QUERYpython - 导出或写入excel ms SQL server QUERY
【发布时间】:2017-05-01 17:58:01
【问题描述】:

我在 sql server 中有一个名为 zd 的数据库和一个名为 user_tab_columns 的表。我想批量导出或将查询语句的结果写入excel。我试图从不同来源模仿的代码最终给了我错误消息。

在数据库zd和表user_tab_columns中,字段如下:

下面是我的代码示例: ValueError with Pandas - shaped of passed values

错误信息 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXXXX escape

import pyodbc
import pandas as pd
import os

cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                              "Server=DPC;"
                               "Database=zD;"
                               "trusted_connection=yes;")

cursor = cnxn.cursor()
script = """
SELECT * 
FROM user_tab_columns
WHERE table_name = "A"
"""

cursor.execute(script)

columns = [desc[0] for desc in cursor.description]
data = cursor.fetchall()
df = pd.DataFrame(list(data), columns=columns)

writer = pd.ExcelWriter('C:\Users\PROGRAMs\TEST\export.xlsx')
df.to_excel(writer, sheet_name ='bar')
writer.save()

【问题讨论】:

    标签: sql-server excel python-3.x export-to-excel


    【解决方案1】:

    我会使用 pandas 的内置 .read_sql()。此外,为了将" 放入python 中的字符串中,您需要使用' 作为引用而不是"

    import pyodbc
    import pandas as pd
    import os
    
    cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                                  "Server=DPC;"
                                   "Database=zD;"
                                   "trusted_connection=yes;")
    
    cursor = cnxn.cursor()
    script = """
    SELECT * 
    FROM user_tab_columns
    WHERE table_name = 'A'
    """
    
    df = pd.read_sql(script, cnxn)
    
    writer = pd.ExcelWriter('C:\Users\PROGRAMs\TEST\export.xlsx')
    df.to_excel(writer, sheet_name ='bar')
    writer.save()
    

    【讨论】:

    • 我在这段代码中仍然有同样的错误信息:writer = pd.ExcelWriter('C:\Users\PROGRAMs\TEST\export.xlsx') SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
    • 好的,我注意到我必须输入双“*\*”才能工作。这是批量导出,如果我想要更多的控制,比如只导出第一个或第二个字段,或者只导出前两行,没有标题怎么办?或者,如果我只想一次导出或迭代地写出每一行和字段,直到查询语句结束?也是给出行号,如何去掉行号?
    • 您可以在路径中使用“\\”,也可以使用r'C:\Users\PROGRAMs\TEST\export.xlsx'。要更改导出,只需更改 SQL 语句以匹配您的条件。
    • 谢谢你,这看起来很漂亮,太棒了。
    • 凯尔,你的回答很好,很有帮助。但是,如果我想将 SQL 语句导出或写入一个尚未保存在任何目录中的新创建的 excel 文件中,我该怎么做呢?我认为这很好,因为有时我不知道用户拥有什么目录并且我不希望程序崩溃。所以它只是弹出一个新创建的excel文件,用户可以对数据做他们想做的事,对不起。
    【解决方案2】:

    使用正斜杠 (/) 而不是反斜杠

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      相关资源
      最近更新 更多