SQLITE_LIMIT_SQL_LENGTH constrains the SQL statement, not every value bound to it.
Make this comfortable
Python SQLite SQL length limits: cap statement text separately from bound values
Operation contract
The connection lowers its SQL-text ceiling to 120 bytes. A long owned statement is rejected before execution, while a short parameterized statement succeeds. The program reads back the actual limit because SQLite may clamp a requested value to its compiled maximum.
Failure boundary
This limit does not replace a bound-value size check, a row-count limit, or query time control. The fixture passes owned SQL; received values must still use parameters. The setting belongs to one connection and should be applied to each connection in a pool.
Working program
import sqlite3
connection = sqlite3.connect(":memory:")
try:
connection.setlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH, 120)
print("limit", connection.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH))
long_statement = "SELECT 47 " + " " * 160
try:
connection.execute(long_statement)
except sqlite3.Error:
print("long_sql_rejected", True)
print("bound_value", connection.execute("SELECT ?", (73,)).fetchone()[0])
finally:
connection.close()Output
limit 120
long_sql_rejected True
bound_value 73Costs and limits
Checking statement length is cheap relative to parsing the SQL. It says nothing about a parameter's bytes; add a separate application limit when large values matter.
Common Mistakes
- Do not count bound data as if it were SQL text.
- Do not build received data into SQL merely to put it under this limit.
- A connection limit is not inherited by a newly opened connection.
Connected lessons
python
sqlite-sql-length-limit
