与sqlite和python中的变量一起更新WHERE语句

时间:2017-01-18 01:29:39

标签: python sqlite

我使用python编写代码并使用SQLite。我需要使用UPDATE和WHERE语句更新表。挑战在于WHERE和UPDATE语句的值都必须是变量。我做了一些研究,发现此链接Sqlite3 Updating Row Defined by a Variable和此https://www.tutorialspoint.com/sqlite/sqlite_update_query.htm

def studentlist():
    '''Checks if a student is checked in any class, inserts the status into the
    student list table Displays a list of all students and their class status'''
    c.execute("SELECT StudentID FROM StudentTable")
    all_students = c.fetchall()
    c.execute("SELECT StudentID FROM CheckedInTable")
    selected_student_id = c.fetchall()
    print("The student id in the studentlist is:", selected_student_id,)
    for i in all_students:
        if i in selected_student_id:
            student_attendance = 'Attending a class'
            c.execute("UPDATE StudentlistTable set ClassAttend = ?", (student_attendance), "WHERE StudentID = ?", (i))
            conn.commit()
        else:
            student_attendance = "Not in class"
            c.execute("UPDATE StudentlistTable set ClassAttend = ?", (student_attendance))
            conn.commit()
studentlist()

运行代码后,我收到以下错误

c.execute("UPDATE StudentlistTable set ClassAttend = ?", (student_attendance), "WHERE StudentID = ?", (i))
TypeError: function takes at most 2 arguments (4 given)

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

根据您收到的错误消息,<?php ############################################################### # cPanel WHM Account Creator 1.1 ############################################################### # Visit http://www.zubrag.com/scripts/ for updates ############################################################### # Required parameters: # - domain - new account domain # - user - new account username # - password - new account password # - package - new account hosting package (plan) # - email - contact email # # Sample run: create-whm-account.php?domain=reseller.com&user=hosting&password=manager&package=unix_500 # # If no parameters passed then input form will be shown to enter data. # # This script can also be run from another PHP script. This may # be helpful if you have some user interface already in place and # want to automatically create WHM accounts from there. # In this case you have to setup following variables instead of # passing them as parameters: # - $user_domain - new account domain # - $user_name - new account username # - $user_pass - new account password # - $user_plan - new account hosting package (plan) # - $user_email - contact email # ############################################################### /////// YOUR WHM LOGIN DATA $whm_user = "root"; // reseller username $whm_pass = "PASS"; // the password you use to login to WHM ##################################################################################### ############## END OF SETTINGS. DO NOT EDIT BELOW ####################### ##################################################################################### $whm_host = $_SERVER['HTTP_HOST']; function getVar($name, $def = '') { if (isset($_REQUEST[$name])) return $_REQUEST[$name]; else return $def; } // Domain name of new hosting account // To create subdomain just pass full subdomain name // Example: newuser.zubrag.com if (!isset($user_domain)) { $user_domain = getVar('domain'); } // Username of the new hosting account if (!isset($user_name)) { $user_name = getVar('user'); } // Password for the new hosting account if (!isset($user_pass)) { $user_pass = getVar('password'); } // New hosting account Package if (!isset($user_plan)) { $user_plan = getVar('package'); } // Contact email if (!isset($user_email)) { $user_email = getVar('email'); } // if parameters passed then create account if (!empty($user_name)) { // create account on the cPanel server $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct"; $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}"; $result = file_get_contents($script.$params); // output result echo "RESULT: " . $result; } // otherwise show input form else { $frm = <<<EOD <html> <head> <title>cPanel/WHM Account Creator</title> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> </head> <body> <style> input { border: 1px solid black; } </style> <form method="post"> <h3>cPanel/WHM Account Creator</h3> <table border="0"> <tr><td>Domain:</td><td><input name="domain" size="30"></td><td>Subdomain or domain, without www</td></tr> <tr><td>Username:</td><td><input name="user" size="30"></td><td>Username to be created</td></tr> <tr><td>Password:</td><td><input name="password" size="30"></td><td></td></tr> <tr><td>Package:</td><td><input name="package" size="30"></td><td>Package (hosting plan) name. Make sure you cpecify existing package</td></tr> <tr><td>Contact Email:</td><td><input name="email" size="30"></td><td></td></tr> <tr><td colspan="3"><br /><input type="submit" value="Create Account"></td></tr> </table> </form> </body> </html> EOD; echo $frm; } ?> 函数需要2个参数,第一个参数用于查询,第二个参数包含要在查询中使用的参数。试试这个:

execute()

这是一个很好的参考问题,可以更详细地讨论您的问题:

How to use variables in SQL statement in Python?