Flask API向MySQL插入网站表单数据时出现AssessmentID不能为空的错误求助
Flask API向MySQL插入网站表单数据时出现AssessmentID不能为空的错误求助
我一直在尝试把网站表单的数据插入MySQL时遇到问题,已经检查过所有数据表,确认AssessmentID字段设置为非空,但还是一直收到同样的错误。
问题出现时的错误信息
xxx.x.x.x - - [23/Mar/2025 14:57:14] "POST /testresult HTTP/1.1" 500 - Traceback (most recent call last): File "C:\Users\directory\HTML\venv\Lib\site-packages\mysql\connector\connection_cext.py",
line 755, in cmd_query
self._cmysql.query(
_mysql_connector.MySQLInterfaceError: Column 'AssessmentID' cannot be nullThe above exception was the direct cause of the following exception:
我已经删除了外键,这是我的ERD图(原链接已移除)
app.py 代码
@app.route('/submit_form', methods=['POST']) def submit_form(): try: print("[DEBUG] submit_form called") # Collect data from the form NSP = request.form.get('NSP') address = request.form.get('address') contact_person = request.form.get('contact_person') email = request.form.get('email') test_datetime_local = request.form.get('Test_DatetimeLocal') customer_segment = request.form.get('customer_segment') ipv6_prefix = request.form.get('ipv6_prefix') TypeOfService = request.form.get('TypeOfService') ProductName = request.form.get('ProductName') RegionName = request.form.get('RegionName') StateName = request.form.get('StateName') MethodOfAssignment = request.form.get('MethodOfAssignment') RequestForAssignment = request.form.get('RequestForAssignment') test_datetime_local = request.form.get('Test_DatetimeLocal') print(f"[DEBUG] Form Data: NSP={NSP}, address={address}, contact_person={contact_person}, email={email}, test_datetime_local={test_datetime_local}, customer_segment={customer_segment}, ipv6_prefix={ipv6_prefix}, TypeOfService={TypeOfService}, ProductName={ProductName}, RegionName={RegionName}, StateName={StateName}, MethodOfAssignment={MethodOfAssignment}, RequestForAssignment={RequestForAssignment}") # Insert into assessment cursor.execute(""" INSERT INTO assessment (CustomerSegment, IPv6Prefix, TypeOfService, ProductName, MethodOfAssignment, RequestForAssignment, AssessmentDate) VALUES (%s, %s, %s, %s, %s, %s, %s) """, (customer_segment, ipv6_prefix, TypeOfService, ProductName, MethodOfAssignment, RequestForAssignment, test_datetime_local)) #assessment_id = cursor.lastrowid #session['assessment_id'] = assessment_id #print(f"[DEBUG] New assessment_id generated: {assessment_id}") # Insert other related data cursor.execute("INSERT INTO nsp (NSPName, Address) VALUES (%s, %s)", (NSP, address)) print("[DEBUG] Inserted into nsp") cursor.execute("INSERT INTO staff (Telephone, Email) VALUES (%s, %s)", (contact_person, email)) print("[DEBUG] Inserted into staff") cursor.execute("INSERT INTO sign_off (AssessmentID, Date) VALUES (%s, %s)", (assessment_id, test_datetime_local)) print("[DEBUG] Inserted into sign_off") cursor.execute("INSERT INTO region (RegionName) VALUES (%s)", (RegionName,)) print("[DEBUG] Inserted into region") cursor.execute("INSERT INTO state (StateName, RegionName) VALUES (%s, %s)", (StateName, RegionName)) print("[DEBUG] Inserted into state") assessment_id = cursor.lastrowid print(f"[DEBUG] Inserted assessment with ID: {assessment_id}") session['assessment_id'] = assessment_id print(f"[DEBUG] assessment_id stored in session: {session['assessment_id']}") db.commit() print("[DEBUG] All inserts committed successfully") return redirect('/testresult') except Exception as e: db.rollback() print(f"[ERROR] An error occurred during submit_form: {e}") return f"An error occurred: {e}" @app.route('/testresult', methods=['GET', 'POST']) def testresult(): assessment_id = session.get('assessment_id') print(f"[DEBUG] testresult page loaded for assessment_id: {assessment_id}") if assessment_id is None: return "ERROR LAGI HAHAHA", 400 if request.method == 'POST': domains = ['Google', 'Facebook', 'Youtube'] for domain in domains: cursor.execute("SELECT Domain_ID FROM domain WHERE DomainName = %s", (domain,)) domain_row = cursor.fetchone() if domain_row is None: print(f"[ERROR] Domain {domain} not found in database.") return f"Domain {domain} not found in database." domain_id = domain_row[0] ipv4_result = request.form.get(f'ping_ipv4_{domain.lower()}') ipv6_result = request.form.get(f'ping_ipv6_{domain.lower()}') print(f"[DEBUG] Domain: {domain}, IPv4: {ipv4_result}, IPv6: {ipv6_result}") cursor.execute(""" INSERT INTO dual_stack_ping (Domain_ID, AssessmentID, IPv4_Result, IPv6_Result, Status) VALUES (%s, %s, %s, %s, %s) """, (domain_id, assessment_id, ipv4_result, ipv6_result, 'Completed')) db.commit() print("[DEBUG] testresult form submitted and committed") return redirect('/dashboard') return render_template('testresult.html', assessment_id=assessment_id) @app.route('/dashboard') def dashboard(): cursor.execute("SELECT * FROM assessment ORDER BY AssessmentID DESC") assessments = cursor.fetchall() print(f"[DEBUG] Loaded dashboard with {len(assessments)} assessments") return render_template('dashboard.html', assessments=assessments) if __name__ == '__main__': app.run(debug=True)
testresult.html 代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="static/style.css"> </head> <body> <!-- write code here --> <h1>Fill in your Test result here</h1> <section class="wrapper-main"> <form action="/testresult" method="post"> <input type="hidden" name="assessment_id" value="{{ assessment_id }}"> <h2>E. Test Results</h2> <h3>Dual-Stack Ping Test</h3> <table> <tr> <th>Domain</th> <th>IPv4</th> <th>IPv6</th> </tr> <tr> <td>Google</td> <td> <label><input type="radio" name="ping_ipv4_google" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv4_google" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv4_google" value=">100ms"> > 100ms</label> </td> <td> <label><input type="radio" name="ping_ipv6_google" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv6_google" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv6_google" value=">100ms"> > 100ms</label> </td> </tr> <tr> <td>Facebook</td> <td> <label><input type="radio" name="ping_ipv4_facebook" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv4_facebook" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv4_facebook" value=">100ms"> > 100ms</label> </td> <td> <label><input type="radio" name="ping_ipv6_facebook" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv6_facebook" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv6_facebook" value=">100ms"> > 100ms</label> </td> </tr> <tr> <td>Youtube</td> <td> <label><input type="radio" name="ping_ipv4_youtube" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv4_youtube" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv4_youtube" value=">100ms"> > 100ms</label> </td> <td> <label><input type="radio" name="ping_ipv6_youtube" value="<20ms"> < 20ms</label> <label><input type="radio" name="ping_ipv6_youtube" value="20-100ms"> 20-100ms</label> <label><input type="radio" name="ping_ipv6_youtube" value=">100ms"> > 100ms</label> </td> </tr> </table> <!-- 原代码此处存在截断,以上为现有完整内容 --> </form> </section> </body> </html>
备注:内容来源于stack exchange,提问作者rahman auf
相关产品推荐
相关产品推荐

