2016-11-17 3 views
0

Ich benutze Python für den Zugriff auf HTML zum Erstellen einer Tabelle, und was ich versuche zu tun ist, wenn ein Benutzer Eingaben Werte und klicken Sie auf einen Absenden-Button, alle Werte werden in der "Schüler" -Tabelle gespeichert. Ich bin mir nicht sicher, wie man den Submit-Button benutzt, um alle Werte zu speichern (Nachname, Vorname, Midtergrade, Finalgrade, Erstes, Zweites, Drittes). Ich bin nicht vertraut mit Pymysql und ich sah durch viele Websites, um Lösungen für diese Probleme zu finden. Ich würde jeden Rat annehmen.Ich erstellte eine Tabelle in HTML mit Python und ich möchte diese Eingabe Tabelle Werte in SQL-Datenbank hinzufügen

import cgitb 
import pymysql 
cgitb.enable() 
print("Content-type: text/html\n") 

print('<form method="" action="">', 
      '<fieldset>', 
       '<legend>Personal information:</legend>', 
       'Last name:' 
       '<input type="text" name="lastname" value="lastname"><br>', 
       'First name:' 
       '<input type="text" name="firstname" value="firstname"><br>', 
       'MidtermGrade:' 
       '<input type="text" name="midtermgrade" value="midtermgrade"><br>', 
       'FinalGrade:' 
       '<input type="text" name="finalgrade" value="finalgrade"><br>', 
       'FirstHW:' 
       '<input type="text" name="firsthw" value="firsthw"><br>', 
       'SecondHW:' 
       '<input type="text" name="secondhw" value="secondhw"><br>', 
       'ThirdHW:' 
       '<input type="text" name="thirdhw" value="thirdhw"><br>', 
       '<br><br>' 
       '<input type="submit" value="Submit">', 
      '</fieldset>' 
    </form>) 

Stellen Sie eine Verbindung zum DB auf der RDS-Instanz her. Ersetzen Sie sie durch Ihre eigenen Server- und Benutzeranmeldeinformationen.

conn = pymysql.connect(host=localhost, port=3306, user='username', passwd='password', db='student') 
cur = conn.cursor() 

Einige SQL einige Daten für Kosmetika

Iterieren über die Ergebnismenge

cur.execute("SELECT * from students") 

ein Leerzeichen zurückzukehren, zu einem Zeitpunkt eine Zeile drucken

die Verbindung schließen up

cur.close() 
conn.close() 

Antwort

0

Ich denke, dass Sie ein bisschen mehr als eine Druckanweisung benötigen, um eine verwendbare Form zu erhalten.
Sie haben ein HTML-Formular erstellt, aber das Senden von Benutzerdaten an einen Server, damit Sie die Werte abrufen können, erfordert einen Webserver.

Ich schlage vor, Sie schauen Flask (oder ein anderes) Web Framework: http://flask.pocoo.org/
Es ist ziemlich einfach, mit zu beginnen, und Sie werden in der Lage, Ihre Formulardaten als Variablen in einer Python-Funktion zu erhalten; Anschließend können Sie Ihre SQL-Funktionen aufrufen, um sie in der Datenbank zu speichern.
Lassen Sie uns wissen, wie Sie gehen!

0

Dieser Ansatz funktioniert nicht, da Sie versuchen, die Seite Server-Seite zu erstellen, dann Eingabe Client-Seite erwarten, dann mehr serverseitige Arbeit, um die Seite zu erstellen. Allerdings (und ich bin selbst kein Experte in diesem Bereich, daher würde ich mich über Korrekturen freuen), sobald Sie die Seitenserverseite erstellt und an den Client gesendet haben, benötigen Sie eine Art von JavaScript auf dem Client, um weitere Informationen zu erhalten vom Server (AJAX ist ein üblicher Weg).

Wenn Sie mit der submit Schaltfläche einverstanden sind, die den Benutzer zu einer anderen Seite führt, um die Ergebnisse zu sehen, benötigen Sie das Javascript nicht. Ich würde strukturieren, was Sie versuchen, so zu tun (beachten Sie, dass ich nicht dieses Recht jetzt testen, so dass Sie es debuggen müssen):

In Datei form.html:

<!-- TODO: put the rest of the HTML here --> 
<form method="post" action="get_results.py"> 
    <fieldset> 
     <legend>Personal information:</legend> 
     Last name: 
     <input type="text" name="lastname" value="lastname"><br> 
     First name: 
     <input type="text" name="firstname" value="firstname"><br> 
     MidtermGrade: 
     <input type="text" name="midtermgrade" value="midtermgrade"><br> 
     FinalGrade: 
     <input type="text" name="finalgrade" value="finalgrade"><br> 
     FirstHW: 
     <input type="text" name="firsthw" value="firsthw"><br> 
     SecondHW: 
     <input type="text" name="secondhw" value="secondhw"><br> 
     ThirdHW: 
     <input type="text" name="thirdhw" value="thirdhw"><br> 
     <br><br> 
     <input type="submit" value="Submit"> 
    </fieldset> 
</form> 

Beachten Sie, dass ich die Attribute action und method im Formular ausgefüllt habe. Das ist reines HTML. Wenn das Formular abgeschickt wird, wird der Benutzer an get_results.py umgeleitet, das die POST-Information lesen muss, die der Seitenanforderung von dem Formular beigefügt wird.

Etwas wie:

In Datei get_results.html:

import cgi 
import cgitb 
import pymysql 

cgitb.enable() 

# This *should* get the fields from the previous form. 
# I can't test it now though... 
form = cgi.FieldStorage() 

# this part is almost straight from https://github.com/PyMySQL/PyMySQL 
import pymysql.cursors 

# Connect to the database 
connection = pymysql.connect(host='localhost', 
          user='user', 
          password='passwd', 
          db='db', 
          charset='utf8mb4', 
          cursorclass=pymysql.cursors.DictCursor) 

try: 
    with connection.cursor() as cursor: 
     student_sql = 'INSERT INTO `students` (lastname, firstname) VALUES (%s, %s)' 
     cursor.execute(student_sql,(form['lastname'], form['firstname'])) 
     # replacing some filed names with '...'. Fill them in 
     grade_sql = 'INSERT INTO `grades` (midtermgrade, finalgrade, ...) VALUES (%d, %d, %d, %d)' 
     cursor.execute(grade_sql, form['midtermgrade'], form['finalgrade'], ...) 
    connection.commit() 
    with connection.cursor() as cursor: 
     # Read a single record 
     sql = "SELECT * FROM students" 
     cursor.execute(sql)) 
     for result in cursor.fetchall(): 
      print(result, '<br>') 
finally: 
    connection.close() 

Das ist der einfachste Weg ist wahrscheinlich, es zu tun. Jedoch, und das ist wichtig zu wissen, dieser Ansatz wird nicht auf größere Projekte skalieren. Für den Anfang, Sie wollen:

  • ein Templat Sprachen, so können Sie Ihre RAW-HTML und Code eingefügt in sie
  • URL-Manipulation (so etwas wie mysite.com//grades nehmen Benutzer gerade trennen zu ihren Noten)
  • Benutzerauthentifizierung (wollen nicht, dass Schüler andere Schüler Noten schauen wir tun?)
  • ein ORM statt direkt mit Ihrer Datenbank zu tun (ich nicht so viel Lager in diesem, aber einige Leute schwören darauf)

Wenn Sie versuchen, etwas viel größer als das zu machen, schauen Sie in ein Framework wie Flask oder Django für Python, oder eine beliebige Anzahl von anderen Lösungen für andere Sprachen.

Verwandte Themen