首页 > 解决方案 > 如何使用python在SQL Server中将字符串数据类型类型的行转换为XML数据类型

问题描述

我将 Web 源存储在我的 SQL Server 表中作为varchar. 该表有 1000 个这些网络资源。手动打开每个 XML 源将其保存为 XML 数据并以 XML 数据类型存储在 SQL Server 表中是一个繁琐的过程。请帮助使用 SQL 或 Python 中的任何脚本,这些脚本可以遍历我的表中的列表并将每个链接保存为 SQL Server 表中的 XML 数据类型。我正在为多个 XML 粉碎准备这些文件。谢谢你的帮助。

select * from [dbo].[FormIndex]

我附上了我的表格片段。

在此处输入图像描述

最终目标如下表。以下是其中一个手动存储为 XML 时的样子。手动完成数千个非常困难,因此我决定使用 python 代码打开存储在 SQL Server 中的字符串,打开它,将 url 保存为XML数据类型并将其存储回表中。

请帮忙 - 谢谢

在此处输入图像描述

这是我用来将表作为 pandas 数据框拉取并遍历每个varcharurl、打开它并将其作为数据保存回 SQL Server 表的 Python 代码XML。但我无法运行它

第一个工作正常并返回正确的结果,返回一个 XMLLink 表(我用来在 SQL Server 中存储 XML 字符串的列名):

 ##From SQL Server database to DataFrame Pandas
 import pandas as pd
 import pyodbc
 
 cnxn = pyodbc.connect

 cnxn = pyodbc.connect(
      r'Trusted_Connection=yes;'
      r'DRIVER={ODBC Driver 13 for SQL Server};'
      r'SERVER=*****;'
      r'DATABASE=IRS-900;'
      r'UID=*****;' 
      r'PWD=*****;'
     )  
 
 query = "SELECT XMLLink FROM [IRS-900].[dbo].[FormIndex]"
 df = pd.read_sql(query, cnxn)
 
print(df.head(7))

但是当我构建 for 循环以遍历数据框时,它会引发错误。这是代码

import os
import pyodbc
import datetime
import pyodbc
import urllib
import pandas as pd

##From SQL Server database to DataFrame Pandas

cnxn = pyodbc.connect

cnxn = pyodbc.connect(
          r'Trusted_Connection=yes;'
          r'DRIVER={ODBC Driver 13 for SQL Server};'
          r'SERVER=*****;'
          r'DATABASE=IRS-900;'
          r'UID=*****;' 
          r'PWD=*****;'
         ) 
 
query = "SELECT XMLLink FROM [IRS-900].[dbo].[FormIndex]"
df = pd.read_sql(query, cnxn)

##print(df.head(7))

for xmlpath in df:
    xmlurl=urllib.request.urlopen(xmlpath)
    xml_as_string = xmlurl.read() 
    cursor = cnxn.cursor()
    cursor.execute("insert into Test_Table values ('Text', 1, '"+ xml_as_string +"')") 
cnxn.commit()
dData = cursor.fetchall()

在此处输入图像描述

标签: pythonsql-serverxmlpandas-datareaderurlopen

解决方案


尝试在循环中打印出 xmlpath 变量。

直接循环数据框只会产生列名,因此 xmlpath 变量所拥有的唯一值是列标题 - “XMLLink”。

在您的帖子中不提及其他任何内容,循环遍历这些值的正确方法是:

for xmlpath in df["XMLLink"]:
    print(xmlpath)

狩猎愉快!


推荐阅读