【问题标题】:Execute stored procedure when a button is clicked on python web在python web上单击按钮时执行存储过程
【发布时间】:2015-05-06 19:12:46
【问题描述】:

我正在创建一个网页,该网页显示数据库/表中存在的对象列表。我有一个存储过程,它从表中检索数据并将数据与将被解析到表中的每一列相关联。

<table id="fileTable" class="display">
    <thead>
        <tr>
            <th>Jobstream Id</th>
            <th>Date</th>
            <th>Server Name</th>
            <th>Request Time</th>
            <th>Status</th>
            <th>StepStatus</th>
            <th>LastUpdate</th>
            <th>DeleteJob</th>
        </tr>
    </thead>
    <tbody>
    #for $i in range(0,$rows.__len__())
        <tr>
            <td>$rows[i].get('JobstreamName')</td>
            <td>$rows[i].get('Date')</td>
            <td>$rows[i].get('ServerName')</td>
            <td>$rows[i].get('RequestTime')</td>
            <td>$rows[i].get('Status')</td>
            <td>$rows[i].get('StepStatus')</td>
            <td>$rows[i].get('LastUpdate')</td>
            <td><input type="submit" value="Delete"/></td>
        </tr>
    #end for
    </tbody>
</table>

每行末尾都会有一个“删除”按钮,用于删除用户希望的任何行(在数据库中)。行的删除应该在存储过程中运行。 我在 python 中有一个函数可以执行存储过程。

但是,我不知道如何连接按钮,该按钮将返回“JobStream Id”和“Date”,作为执行存储过程的参数。

我使用 Cheetah 作为 web 开发工具来运行 python 代码。 感谢我能得到的任何帮助,在此先感谢。

编辑: 让我在这里重新表述一下自己。因此,网页中生成的表格数据正在使用存储过程从数据库中提取。我正在尝试添加一个功能(每行末尾有一个删除按钮),允许用户删除任何行。因此,我需要 将 html 变量传递给我的 python 变量 以运行另一个存储过程,但我无法这样做。希望这能澄清大部分的困惑。谢谢

这里是完整的代码:

def getJobStreamStatus(Delete):
    Delete = 'Just a random string'
    user,pwd,server,db =  SPCaller.parseLogin('DMClient@gpdevdb81\\dmresrchdbdev.EquityData')
    db =  DB.dbConn(computerName=server,databaseName=db,userName=user,password=pwd)
    #results = SPCaller.readSPReturnDict('getJobStreamRerunStatus',None, 'DMClient@gpdevdb81\\dmresrchdbdev.EquityData')
    cols, rs = db.getResultSetFromSP('getJobStreamRerunStatus',None)
    #html = []
    definition = """<br><br><br><br><br><br><HR>$title 
    <table id="fileTable" class="display">
        <thead>
            <tr>
                <th>Jobstream Id</th>
                <th>Date</th>
                <th>Server Name</th>
                <th>Request Time</th>
                <th>Status</th>
                <th>StepStatus</th>
                <th>LastUpdate</th>
                <th>DeleteJob</th>
            </tr>
        </thead>
        <tbody>
        #for $i in range(0,$rows.__len__())
            <tr>
            <td>$rows[i].get('JobstreamName')</td>
            <td>$rows[i].get('Date')</td>
            <td>$rows[i].get('ServerName')</td>
            <td>$rows[i].get('RequestTime')</td>
            <td>$rows[i].get('Status')</td>
            <td>$rows[i].get('StepStatus')</td>
            <td>$rows[i].get('LastUpdate')</td>
            <td><input type="button" value="Delete" name='btnEdit' class='btnEdits' /></td>
            </tr>
        #end for
        </tbody>
    </table>
    """ 

    return str(Template(definition, searchList=[{'cols':cols, 'rows':arrToDict(cols,rs),'Delete':Delete,'title':'Showing all jobs in the rerun queue with status <b>waiting: 0, running: 2, and failed: 3</b><br><br>'}]))

【问题讨论】:

  • 我的回答有用吗?我可以反馈一下吗?

标签: python html sql-server stored-procedures cheetah


【解决方案1】:

我不懂 Python,但我认为您可以为每一行创建一个表单,并添加一个带有显示行 ID 的隐藏字段。

当用户点击提交按钮时,你很容易读取请求表单集合的隐藏字段的值并将其传递给存储过程:

#for $i in range(0,$rows.__len__())
    <tr>
        <form action = "....">
           <input type="hidden" name="id" value="$rows[i].get('Id')"> 
           <td>$rows[i].get('JobstreamName')</td>
           <td>$rows[i].get('Date')</td>
           <td>$rows[i].get('ServerName')</td>
           <td>$rows[i].get('RequestTime')</td>
           <td>$rows[i].get('Status')</td>
           <td>$rows[i].get('StepStatus')</td>
           <td>$rows[i].get('LastUpdate')</td>
           <td><input type="submit" value="Delete"/></td>
        </form>
    </tr>
#end for

上面的代码假设您的数据中有一个id 字段。

【讨论】:

  • 感谢和抱歉迟到的回复。所以我需要在我的数据库中有一个标识列来跟踪正在单击哪个按钮?还有一个问题,如果我使用input type="button" 会怎样?我对这个前端开发真的很陌生。
  • Type submit 将自动将表单提交到后端(这意味着它将针对您在表单操作属性中设置的 url 启动一个 post 请求,我用点替换了那个)如果您使用 type按钮,您必须在 javascript 中手动提交它
  • 对于第一部分,我猜你的数据库中有一个主键,你只需要将值放在隐藏字段中,以便在后端知道点击了哪个元素。
  • 太棒了。谢谢保罗。这解决了部分问题。但我仍然需要想办法在从 html 到 python 之间传递变量。我可以将变量从 python 传递到 html,但不能反过来。
  • 不幸的是我不懂 Python。在其他技术(如我知道的 ASP 或 ASP.NET)上,您可以通过Request.Form["Id"] 之类的代码读取在 POST 请求中传递的值
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多