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

如何向表中插入重复标签/字符串数据及读取重复<deviMessage>标签内容

问题1:如何向数据库表中插入重复的标签或字符串数据?

这个得看你的表结构有没有限制重复值:

  • 如果目标字段没有设置唯一约束,那直接用常规的INSERT语句就能轻松插入重复数据,举个MySQL的例子:
    INSERT INTO tag_table (tag_content) VALUES ('重复标签A'), ('重复标签A'), ('重复标签B');
    
  • 如果字段加了唯一约束,但你确实需要存重复值,那得调整下结构:
    • 方案一:给表加个自增主键,让每条记录都有唯一标识,这样即使标签重复也能插入:
      ALTER TABLE tag_table ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
      
      之后再执行INSERT就没问题了。
    • 方案二:如果是要把重复标签和其他主数据关联,不如建个关联表,比如主表存业务数据,关联表专门存标签,这样同一个标签可以反复关联不同的主记录:
      CREATE TABLE tag_links (
        id INT AUTO_INCREMENT PRIMARY KEY,
        business_id INT,
        tag_content VARCHAR(255),
        FOREIGN KEY (business_id) REFERENCES business_table(id)
      );
      
问题2:读取所有重复标签内容并插入表中

首先看你给的字符串,里面是转义后的XML(用&lt;代替<,&gt;代替>),而且还有个小格式错误:< deviations>多了空格,应该是<deviations>,后面的 deviations>要改成</deviations>,先修正这个才能正常解析。

我给你两种常用的解决方式:

用Python处理(适合批量或复杂场景)

先把转义字符还原,再解析XML提取所有的内容,最后批量插入数据库:

import xml.etree.ElementTree as ET
import mysql.connector

# 原始字符串
raw_xml_str = "<loan>&lt;applicant&gt;&lt;partyReference&gt;string&lt;/partyReference&gt;&lt; deviations&gt;&lt;deviMessage&gt;read this data&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt; deviations&gt;&lt;deviMessage&gt;read thid data2&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt; &lt;Numerator&gt;0.036848584684376046&lt;/Numerator></loan>"

# 1. 还原转义字符 + 修正XML格式错误
clean_xml = raw_xml_str.replace('&lt;', '<').replace('&gt;', '>')
clean_xml = clean_xml.replace('< deviations>', '<deviations>').replace(' deviations>', '</deviations>')

# 2. 解析XML提取所有deviMessage内容
root = ET.fromstring(clean_xml)
all_messages = [msg.text.strip() for msg in root.findall('.//deviMessage')]

# 3. 批量插入数据库(以MySQL为例)
db_conn = mysql.connector.connect(
    host='你的数据库地址',
    user='用户名',
    password='密码',
    database='数据库名'
)
cursor = db_conn.cursor()

# 批量插入语句
insert_sql = "INSERT INTO message_table (content) VALUES (%s)"
cursor.executemany(insert_sql, [(msg,) for msg in all_messages])
db_conn.commit()

# 关闭连接
cursor.close()
db_conn.close()

用SQL直接处理(适合MySQL 8.0+)

如果你的数据库支持XML函数,可以直接在SQL里完成解析和插入:

-- 假设原始字符串存在source_table的content字段中
INSERT INTO target_table (message_content)
SELECT devi_msg
FROM source_table,
     XML_TABLE(
         -- 先还原转义字符并修正格式
         REPLACE(REPLACE(content, '&lt;', '<'), '&gt;', '>')
         PASSING '//deviMessage' AS path
         COLUMNS devi_msg TEXT PATH '.'
     ) AS msg_table;

内容的提问来源于stack exchange,提问作者Vaibhav Save

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:59