Presentation is loading. Please wait.

Presentation is loading. Please wait.

SQL – Parameterized Queries

Similar presentations


Presentation on theme: "SQL – Parameterized Queries"— Presentation transcript:

1 SQL – Parameterized Queries

2 The execute method revisited
conn = sqlite3.connect(":memory:") conn.execute("CREATE TABLE students (name TEXT, age INTEGER);") conn.execute("INSERT INTO students VALUES ('Josh', 27);") What if we wanted to add a python integer? dog_age = 7 conn.execute( "INSERT INTO students VALUES ('Zoe', " + str(dog_age) + ");" )

3 Parameterized Queries
Used to pass python objects into queries without needing to manually convert to strings. dog_age = 7 conn.execute("INSERT INTO students VALUES ('Zoe', ?);", (dog_age,)) row = ('Tim', 45) conn.execute("INSERT INTO students VALUES (?, ?);", row)

4

5 Explanation The problem is if we wrote code like this:
name = "Robert'); DROP TABLE students; --" conn.execute("INSERT INTO students VALUES ('" + name + "');") # INSERT INTO students VALUES ('Robert'); # DROP TABLE students; --'); The input would be allowed to execute arbitrary queries against the database.

6 Protection by parameterized query
Parameterized queries will automatically escape the input and ensure that the value passed in is store as that value. name = "Robert'); DROP TABLE students; --" conn.execute("INSERT INTO students VALUES (?);", (name,)) The string name will be stored, in its entirety, and the single quote will be escaped to stop it from harming the database.

7 Python and Sqlite datetime revisisted
Python's sqlite3 module actually has build-in support for the automatic conversion of python datetime objects: datetime.date objects are of type DATE datetime.datetime objects are of type TIMESTAMP You need to tell sqlite that you will be using custom types instead of the usual 4 (INTEGER, REAL, TEXT, BLOB) by passing an additional arguments to "connect".


Download ppt "SQL – Parameterized Queries"

Similar presentations


Ads by Google