How to use variables in SQL statement in Python?

In Python, when working with SQL statements, it is common to use variables to dynamically insert values into the queries. This is especially useful when working with user inputs or when the values to be inserted into the query are not known beforehand. However, it is important to be careful when using variables in SQL statements to avoid SQL injection attacks.

In this article, we will discuss how to use variables in SQL statements in Python and provide examples to better understand the concept.

1. Using String Formatting

One approach to using variables in SQL statements in Python is by using string formatting. Python provides several ways to format strings, and one common method is using the % operator.

var1 = 10
var2 = "example"
var3 = "test"

sql_query = "INSERT INTO table VALUES (%s, '%s', '%s')" % (var1, var2, var3)
cursor.execute(sql_query)

In this code snippet, we define the variables var1, var2, and var3. We then create a SQL query string where the variables are inserted using the % operator and placeholders %s for the integer and '%s' for the strings. Finally, we execute the query using the cursor.execute() method.

It is important to note that when using string formatting, we need to ensure the correct data type for each variable placeholder. For example, integers and booleans should be formatted with %d, while strings should be formatted with %s.

2. Using Parameterized Queries

Another approach to using variables in SQL statements is by using parameterized queries. Parameterized queries help prevent SQL injection attacks by separating the query from the user-supplied data. This can be done using placeholder %s for all data types, and the actual values are passed as a second argument to the execute() method.

var1 = 10
var2 = "example"
var3 = "test"

sql_query = "INSERT INTO table VALUES (%s, %s, %s)"
cursor.execute(sql_query, (var1, var2, var3))

In this code snippet, we create a SQL query string with placeholders %s for all the variables. Instead of directly inserting the values into the query, we pass them as a second argument to the execute() method.

Using parameterized queries is considered a safer approach as it helps protect against SQL injection attacks. It ensures that the user-supplied data is treated as data and not as part of the SQL query.

3. Using ORM (Object-Relational Mapping)

If you are using an ORM (Object-Relational Mapping) library in Python, such as SQLAlchemy or Django ORM, you can use their query building capabilities to handle variables in SQL statements.

Here is an example using SQLAlchemy:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('database_url')
Session = sessionmaker(bind=engine)
session = Session()

var1 = 10
var2 = "example"
var3 = "test"

session.execute("INSERT INTO table VALUES (:var1, :var2, :var3)",
                {'var1': var1, 'var2': var2, 'var3': var3})
session.commit()

In this code snippet, we first create an SQLAlchemy engine and session. We then define the variables var1, var2, and var3. We use the session.execute() method to execute the SQL query with placeholders :var1, :var2, and :var3. The actual values are passed as a dictionary to the execute() method.

Using an ORM can provide additional abstraction and convenience when working with SQL statements in Python, especially when dealing with complex queries and relationships between database tables.

4. Handling Quotes and Special Characters

When using variables in SQL statements, it is important to handle quotes and special characters properly to avoid syntax errors or SQL injection vulnerabilities.

Here are some examples:

var1 = 10
var2 = "John"
var3 = "I'm happy"

sql_query = "INSERT INTO table VALUES (%s, '%s', '%s')" % (var1, var2, var3)
cursor.execute(sql_query)
var1 = 10
var2 = "John"
var3 = "I'm happy"

sql_query = "INSERT INTO table VALUES (%s, %s, %s)"
cursor.execute(sql_query, (var1, var2, var3))
var1 = 10
var2 = "John"
var3 = "I'm happy"

session.execute("INSERT INTO table VALUES (:var1, :var2, :var3)",
                {'var1': var1, 'var2': var2, 'var3': var3})
session.commit()

In all these examples, the variable var3 contains a single quote character. To handle this, we can use double quotes or escape the special character by adding an additional single quote before it.

Conclusion

In this article, we discussed how to use variables in SQL statements in Python. We explored three different approaches: using string formatting, using parameterized queries, and using ORM libraries. We also highlighted the importance of handling quotes and special characters properly to avoid syntax errors and SQL injection vulnerabilities.

By using variables in SQL statements, we can write more dynamic and flexible code, especially when dealing with user inputs or varying data.