首页 > 解决方案 > 对标签进行分组并将数据从 Python 导出回 SQL Server

问题描述

我正在尝试使用以下代码使用fuzzywuzzy 清理列:

import pyodbc 
from fuzzywuzzy import fuzz

# Getting sql list
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=USER-PC\SQLEXPRESS;'
                      'Database=AdventureWorks2014;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()
cursor.execute("SELECT top 100 Publisher FROM dbo.Publishers where publisher like '%Ebate%'")

Product_list = cursor.fetchall()

# Groups of names with Levenshtein distance > 77

Groups = list() 
for name in Product_list:
    for grp in Groups:
        if all(fuzz.ratio(name, wd) > 78 for wd in grp):
            grp.append(name)
            break
    else:
        Groups.append([name, ])

print('output Groups:', Groups)

输出:

output Groups: [[('Ebates.com', ), ('Ebates', ), ('Ebates Inc', ), ('Ebates.com', ), ('Ebates', ), ('Ebates', ), ('Ebates', ), ('Ebates', ), ('Ebates.ca', ), ('Ebates.com', ), ('Ebates', )], [('ExtraRebates', ), ('Mr. Rebates', ), ('RebatesMe', ), ('ExtraRebates', ), ('Mr. Rebates', ), ('RebatesMe', )] ...

作为 Python 新手,我一直在寻找一种方法:

  1. 在单独的列中命名每个组。
  2. 将结果(分组、发布者)导出到 SQL 上的新表。

任何帮助深表感谢 !

标签: sql-serverpython-3.xgroupingpyodbcfuzzywuzzy

解决方案


为此,您可以只使用 pandas 库(只需在终端/命令提示符上执行“pip install pandas”)。

您可以为每个结果创建一个包含一列的表,并将此表推送到您的 sql 数据库:

import pandas as pd
tableresult = pd.DataFrame(Groups).T
tableresult.to_sql('table', engine, index=False, if_exists='replace')

在您的“to_sql”命令中:

  1. index=False:避免在 sql 表中推送索引列
  2. if_exists='replace':sql中推表的一种方式

有关更多信息,您可以在此处查看。

我希望它有所帮助,

BR。


推荐阅读