[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: sql.rst
File is not writable. Editing disabled.
`psycopg2.sql` -- SQL string composition ======================================== .. sectionauthor:: Daniele Varrazzo <daniele.varrazzo@gmail.com> .. module:: psycopg2.sql .. versionadded:: 2.7 The module contains objects and functions useful to generate SQL dynamically, in a convenient and safe way. SQL identifiers (e.g. names of tables and fields) cannot be passed to the `~cursor.execute()` method like query arguments:: # This will not work table_name = 'my_table' cur.execute("insert into %s values (%s, %s)", [table_name, 10, 20]) The SQL query should be composed before the arguments are merged, for instance:: # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20]) This sort of works, but it is an accident waiting to happen: the table name may be an invalid SQL literal and need quoting; even more serious is the security problem in case the table name comes from an untrusted source. The name should be escaped using `~psycopg2.extensions.quote_ident()`:: # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name), [10, 20]) This is now safe, but it somewhat ad-hoc. In case, for some reason, it is necessary to include a value in the query string (as opposite as in a value) the merging rule is still different (`~psycopg2.extensions.adapt()` should be used...). It is also still relatively dangerous: if `!quote_ident()` is forgotten somewhere, the program will usually work, but will eventually crash in the presence of a table or field name with containing characters to escape, or will present a potentially exploitable weakness. The objects exposed by the `!psycopg2.sql` module allow generating SQL statements on the fly, separating clearly the variable parts of the statement from the query parameters:: from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20]) The objects exposed by the `!sql` module can be used to compose a query as a Python string (using the `~Composable.as_string()` method) or passed directly to cursor methods such as `~cursor.execute()`, `~cursor.executemany()`, `~cursor.copy_expert()`. .. autoclass:: Composable .. automethod:: as_string .. autoclass:: SQL .. autoattribute:: string .. automethod:: format .. automethod:: join .. autoclass:: Identifier .. versionchanged:: 2.8 added support for multiple strings. .. autoattribute:: strings .. versionadded:: 2.8 previous verions only had a `!string` attribute. The attribute still exists but is deprecate and will only work if the `!Identifier` wraps a single string. .. autoclass:: Literal .. autoattribute:: wrapped .. autoclass:: Placeholder .. autoattribute:: name .. autoclass:: Composed .. autoattribute:: seq .. automethod:: join
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server05.hostinghome.co.in
Server IP: 192.168.74.40
PHP Version: 7.4.33
Server Software: Apache
System: Linux server05.hostinghome.co.in 3.10.0-962.3.2.lve1.5.81.el7.x86_64 #1 SMP Wed May 31 10:36:47 UTC 2023 x86_64
HDD Total: 1.95 TB
HDD Free: 690.91 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Disabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: itsweb
User ID (UID): 1619
Group ID (GID): 1621
Script Owner UID: 1619
Current Dir Owner: N/A