2017-02-28 3 views
-5

Kann mir bitte jemand helfen, zu verstehen, wie man den Feldwert in einem sql-Ergebnis auswählt? Ich möchte diesen Wert verwenden, um eine neue Abfrage auszuführen.Daten aus SQL abrufen Ergebnis

Ich verwende Python, um HTML, Apache und SQL-Server zu verbinden, um eine Website zu erstellen, die SQL-Abfrage ausführen und Ergebnisse anzeigen wird. Sobald ich das Ergebnis erhalten habe, möchte ich den Wert einer Spalte in einer neuen SQL-Abfrage verwenden. Gibt es eine Möglichkeit, das zu tun, anstatt den Wert in einem Formular manuell einzugeben?

Code1: Der folgende Code führt einen Datenbankaufruf durch, der die Ergebnisse basierend auf der SQL-Abfrage anzeigt.

# prepare a cursor object using cursor() method 
cursor = db1.cursor() 

SQLQuery = ("SELECT I.OpinionID, 
        I.TimeStamp, 
        I.Strategy, 
        I.ExpectedTradingPrice, 
        I.ExpectedDate, 
        I.CPAMAnalyst, 
        I.Conviction, 
        I.Status, 
        N.DebtTicker, 
        N.InstrumentType, 
        N.ExpectedMaturity, 
        N.OrderSize, 
        N.Allocation 
       From [CpamTestAugustTestSteve].[dbo].[NewIssueOpinion] I 
       INNER JOIN [CpamTestAugustTestSteve].[dbo].[NewIssue] N ON I.NewIssueID = N.NewIssueID 
       WHERE N.ExpectedIssueDate >= GetDate()-30 
        AND I.Status = 'Suggested' AND I.Active = 1;") 

#Execute the SQL command 
cursor.execute(SQLQuery) 


#Fetch all the rows in a list of lists. 
results=cursor.fetchall() 
y = len(results) 


print "<br> <br>" 
print "<body2>" 
print """<form action="http://localhost/NewIssueStatusUpdate.py" method="post"> 
      <div> <input type="Submit" class= "submitbutton" value="Submit" /> </div> <br> <br> 
</form>""" 
if not cursor.rowcount: 
    print "<b> <mark> NO RECORDS FOUND!!</mark> </b>" 
else: 
    print "<TABLE>" 
    print "<tablebody>" 
    print"<tr>" 
    print "<tr><th>S.No</th><th>OpinionID</th> <th>TimeStamp</th> <th>Strategy</th> <th>ExpectedTradingPrice</th> <th>ExpectedDate</th> <th>CPAMAnalyst</th> <th>Conviction</th> <th>Status</th> <th>DebtTicker</th> <th>InstrumentType</th> <th>ExpectedMaturity</th> <th>OrderSize</th> <th>Allocation</th><th>New Status</th>" 
    for p in range(y): 
     print "<tr><td>%s</td>" %(p+1) 
     for q in range(len(results[p])): 
      r= results[p][q] 
      print "<td> %s </td>" % (r) 
    print "<td><select id='statusSelect' onchange='myChangeHandler(this)'><option value='Suggested'>Select</option><option value='accept'>Accept</option><option value='reject'>Reject</option><option value='terminated'>Terminated</option></select></td>" 
    print "</TABLE>" 
    from tabulate import tabulate 

Ich habe eine benutzerdefinierte Spalte im Ergebnis über ‚Neuen Status‘, in dem wir den neuen Status auswählen können, die wir den Datensatz zugeordnet werden sollen.

Ich möchte einen Code schreiben, mit dem die Datenbank aktualisiert werden kann. Die Abfrage ist:

"UPDATE NewIssueOpinion " & _ 
"SET Status = '" & Status & "' " & _ #Getting Status using getformvalue. 
"WHERE OpinionID = " & OpinionID & ";"  #How can we select the Opinion ID value from the result displayed from code1. 

AKTUALISIERT Code:

# prepare a cursor object using cursor() method 
cursor = db1.cursor() 

SQLQuery = ("SELECT I.OpinionID, 
        I.TimeStamp, 
        I.Strategy, 
        I.ExpectedTradingPrice, 
        I.ExpectedDate, 
        I.CPAMAnalyst, 
        I.Conviction, 
        I.Status, 
        N.DebtTicker, 
        N.InstrumentType, 
        N.ExpectedMaturity, 
        N.OrderSize, 
        N.Allocation 
       From [CpamTestAugustTestSteve].[dbo].[NewIssueOpinion] I 
       INNER JOIN [CpamTestAugustTestSteve].[dbo].[NewIssue] N ON I.NewIssueID = N.NewIssueID 
       WHERE N.ExpectedIssueDate >= GetDate()-30 
        AND I.Status = 'Suggested' AND I.Active = 1;") 

#Execute the SQL command 
cursor.execute(SQLQuery) 


#Fetch all the rows in a list of lists. 
results=cursor.fetchall() 
y = len(results) 
#define function 
def Review(): 
    cursor.close() 
    cursor = db1.cursor() 
    for result in results: 
     my_OpinionID = result[1] 
     my_StatusID = result[14] 
     cursor.execute('UPDATE [CpamTestAugustTestSteve].[dbo].[NewIssueOpinion] SET Status = ? WHERE OpinionID = ?', (my_StatusID, my_OpinionID)) 
     db1.commit() 
     cursor.close() 
     db1.close()  
location.reload() 
print "<br> <br>" 
print "<body2>" 
print "<form method='post' onclick='return Review();'>" 
print "<div> <input type='Submit' class= 'submitbutton' value='Submit' /> </div> <br> <br>" 
print "</form>" 
if not cursor.rowcount: 
    print "<b> <mark> NO RECORDS FOUND!!</mark> </b>" 
else: 
    print "<TABLE>" 
    print "<tablebody>" 
    print"<tr>" 
    print "<tr><th>S.No</th><th>OpinionID</th> <th>TimeStamp</th> <th>Strategy</th> <th>ExpectedTradingPrice</th> <th>ExpectedDate</th> <th>CPAMAnalyst</th> <th>Conviction</th> <th>Status</th> <th>DebtTicker</th> <th>InstrumentType</th> <th>ExpectedMaturity</th> <th>OrderSize</th> <th>Allocation</th><th>New Status</th>" 
    for p in range(y): 
     print "<tr><td>%s</td>" %(p+1) 
     for q in range(len(results[p])): 
      r= results[p][q] 
      print "<td> %s </td>" % (r) 
    print "<td><select id='statusSelect'><option value='Suggested'>Select</option><option value='Accepted'>Accept</option><option value='rejected'>Reject</option><option value='terminated'>Terminated</option></select></td>" 
    print "</TABLE>" 
    from tabulate import tabulate      
print "</body2>" 


db1.commit() 

die Seite neu zu laden, wenn ich den Absenden-Button klicken, aber die Datenbank wird nicht aktualisiert. Nicht sicher, was schief gelaufen ist!

+2

Hi Addy. Ich weiß, dass du hier viele Leute finden wirst, die anderen Menschen in Not helfen wollen, aber alle sind zu faul, um ein ganzes Programm für dich zu schreiben. Wenn Sie Ihren Beitrag bearbeiten, indem Sie den Code, den Sie bisher verwendet haben, und die Teile, die problematisch oder fehlen, kann es anders sein (und die Downvotes werden aufhören) –

+1

Vielen Dank Ettore, :) Ich habe die Frage zu aktualisieren der Code. Ich schätze Ihre Antwort sehr, um mir zu helfen, bessere Hilfe/Antwort zu bekommen. Ich bin auch neu bei Stackoverflow. Bis jetzt habe ich es nur verwendet, um bestehende Fragen zu recherchieren, in letzter Zeit habe ich begonnen, Fragen zu stellen. Finde immer noch den besten Weg, das zu tun. – AddyB

+1

Die Leser wollen hier helfen, aber für eine Gemeinschaft neu zu sein, ist offensichtlich keine Entschuldigung dafür, Freiwillige um freie Arbeit zu bitten. Es ist wichtig zu verstehen, dass etwas nur für das Poster und für niemanden wichtig ist. – halfer

Antwort

0

2 Punkte hier:

cur.fetchall ein Tupel von Tupel zurück. results[0][0] wird die OpinionID für die erste Zeile in den von der Abfrage zurückgegebenen Daten sein. results[1][0] wird die OpinionID für die zweite sein usw. results [0][7] wird die Der Status für die erste Zeile usw.

NICHT gebaut Abfragen mit Python String-Verkettung sein. Verwenden der sicheren Methode.

my_first_OpinionID = results[0][0] 
my_first_statusID = results[0][7] 
cur.execute("UPDATE NewIssueOpinion SET Status = ? WHERE OpinonID = ?", (my_first_OpinionID, my_first_statusID)) 

Sie finden diese Links nützlich:

<http://zetcode.com/db/mysqlpython/> 
<http://bobby-tables.com/python> 
<http://sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html> 

+0

Ich glaube, der Code liest nur in der ersten Zeile Meinungs-ID und Status-ID, ich möchte dies für alle Zeilen, die als Ergebnis angezeigt werden, ausführen können. – AddyB

+0

Wie würden Sie normalerweise ein Tupel oder eine Liste lesen? 'mit Ergebnis in Ergebnissen: my_OpinionID = Ergebnis [0], my_StatusID [7] usw. In meiner Antwort ist der erste Index die * Zeile *, der zweite Index ist der * Ort in der Zeile *. – Alan

+0

P.S. Vergessen Sie nicht, Ihre Transaktion beim Update zu bestätigen! – Alan

0

für Ergebnis in cursor.execute (SQLQuery, multi = True): wenn result.with_rows:

gleichen hier, das letzte Mal, als ich versuchte, eine Verbindung zu db herzustellen und die Ergebnisse zu drucken, verwende ich das