使用Flask将多行域名分别插入MySQL数据库表的实现问题
问题根因
你当前处理得到的ss是包含换行符的整段字符串,没有按行拆分为独立的域名条目,执行单次INSERT语句时会把整段内容作为一个值插入,自然就出现在同一行中。
解决方法
先将整段域名文本按换行拆分为独立条目,过滤空行后批量插入即可,推荐使用executemany完成批量操作,比循环执行单条插入效率更高。
修正后的代码如下:
@flask.route('/domain_settings', methods=['GET', 'POST']) def domain_settings(): # 此处需先正确获取传入的域名文本,示例为从表单字段domain_list中取值 s = request.form.get('domain_list', '') # 按换行拆分文本,逐行去除首尾空格,同时过滤空行 domain_list = [line.strip() for line in s.splitlines() if line.strip()] cur = mysql.connection.cursor() # 批量插入多个域名 cur.executemany('INSERT INTO domain (domain_name) VALUES (%s)', [(domain,) for domain in domain_list]) mysql.connection.commit() cur.close()
核心修改说明
- 调用
splitlines()方法将整段带换行的字符串拆分为由单行内容组成的列表 - 列表推导式同时完成了单行内容去空格、无效空行过滤的逻辑,避免插入空白无效值
- 用
executemany执行批量插入,要求每个参数对应一个元组,因此将每个域名包装为(domain,)的格式传入
内容的提问来源于stack exchange,提问作者Samer Adnan
相关产品推荐
相关产品推荐

