Mysql 迭代多行输入,并与数据库项匹配

Mysql 迭代多行输入,并与数据库项匹配,mysql,python-3.x,flask,iteration,flask-sqlalchemy,Mysql,Python 3.x,Flask,Iteration,Flask Sqlalchemy,我需要帮助迭代我正在编写的Web应用程序的输入,它看起来像: 用户将输入数百(或数千)个粘贴自excel文档的URL,每个URL都位于一个新的行上,如下所示。到目前为止,您可以看到,我已经创建了输入页面和输出页面,并编写了查询数据库的代码 from flask import Flask,render_template, request from flask_sqlalchemy import SQLAlchemy from urllib.parse import urlparse from s

我需要帮助迭代我正在编写的Web应用程序的输入,它看起来像:

用户将输入数百(或数千)个粘贴自excel文档的URL,每个URL都位于一个新的行上,如下所示。到目前为止,您可以看到,我已经创建了输入页面和输出页面,并编写了查询数据库的代码

from flask import Flask,render_template, request
from flask_sqlalchemy import SQLAlchemy
from urllib.parse import urlparse
from sqlalchemy.ext.declarative import declarative_base


app = Flask(__name__)
app.config["DEBUG"] = True
app.config["SECRET_KEY"] = "secret_key_here"
db = SQLAlchemy(app)

SQLALCHEMY_DATABASE_URI = db.create_engine(connector_string_here))
app.config[SQLALCHEMY_DATABASE_URI]  = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db.Model = declarative_base()
class Scrapers(db.Model):
    __tablename__ = "Scrapers"

    id = db.Column(db.Integer, primary_key = True)
    scraper_dom = db.Column(db.String(255))
    scraper_id = db.Column(db.String(128))

db.Model.metadata.create_all(SQLALCHEMY_DATABASE_URI)

Session = db.sessionmaker()
Session.configure(bind=SQLALCHEMY_DATABASE_URI)
session = Session()

scrapers = session.query(Scrapers.scraper_dom, Scrapers.scraper_id).all()

@app.route("/", methods=["GET","POST"])
def index():
    if request.method == "Get":
        return render_template("url_page.html")
    else:
        return render_template("url_page.html")

@app.route("/submit", methods=["GET","POST"])
def submit():
    sites = [request.form["urls"]]
    for site in sites:
        que = urlparse(site).netloc
    return render_template("submit.html", que=que)

#scrapers.filter(Scrapers.scraper_dom.in_(
#next(x.scraper_id for x in scrapers if x.matches(self.fnetloc))
显然,这是不完整的。我忽略了以前匹配输入的尝试,因为我意识到在迭代输入时遇到了问题。起初,我只能让它打印所有的输入,而不是遍历它。现在,它打印成这样:

这只是对输入的第一行重复
urlparse(site).netloc
,一些随机次数。它正在正确解析并返回我以后需要使用的实际值(对于每个
urlparse(site).netloc
match scraper\u dom并返回相关的scraper\u id)。不过,现在我尝试使用
input()
,但由于
[request.form[“url”]]
不是可编辑的,所以不断出现错误

请帮忙,我将不胜感激

站点输出:

新输出包括:

que = [urlparse(site).netloc for site in request.form["urls"].split('\n')]

不知道您从文本字段接收的文本是否只需要是
.split('\n')
。。。因为可能
.netloc()
调用只解析一个长字符串,并获取第一个域(alibaba.com),然后对字符串中的每个字符进行迭代…添加:
@app.route(“/submit”,methods=[“GET”,“POST”])def submit():sites=[request.form[“url”]]。sites中site的拆分('\n'):que=urlparse(site).netloc return render_template(“submit.html”,que=que)
导致错误:2020-01-10 04:17:45681:AttributeError:'list'对象没有属性'split'请尝试一个简单的:
请求。表单[“url”].split('\n')
不带括号的
[…]
方法。。。这就是您在列表上调用的
.split()
,现在它所做的事情与我最初发布的相同,但使用的是最后一个域。item.gmarket.co.kr*噢!*您正在将
que=que
传递到模板,并且
que
设置的最后一项是for循环中的最终站点。尝试将每个站点附加到新列表并在模板中迭代,甚至:消除for循环并执行:
que=[urlparse(site).netloc for site in request.form[“url”].split('\n')]