在 Python 中区分变量名和数据库字段名

To distinguish variable name from DB field name in Python

代码

import psycopg2
import psycopg2.extras
def store_values_to_pg94(file_size, connection): 
    cursor = connection.cursor()
    cursor.execute(
        INSERT INTO measurements
        (file_size) 
        VALUES (file_size)

其中列的字段名在PostgreSQL 9.4中是file_size但变量名在Python中也是file_size

如何避免这种冲突?

您示例中的代码无法编译,即无效 python。 cursor.execute() 接受一个字符串和一组可选的参数,这些参数根据数据库模块的 paramstyle.

扩展到字符串中

事实上,当使用 DBAPI 时,您的问题甚至不会浮出水面,因为 SQL 语法和 python 语法是完全分开的。

如果您使用 psycopg2 访问 PostgreSQL,paramstylepyformat,因此

cursor.execute(
    'INSERT INTO measurements (file_size) VALUES (%(file_size)s);',
    file_size=file_size # pass variable file_size as named parameter file_size
);

如您所见,您指定 SQL 查询并为要从 python 代码传入的值保留占位符。

如果paramstyle == 'pyformat',也可以使用位置参数:

cursor.execute(
    'INSERT INTO measurements (file_size) VALUES (%s);',
    file_size # pass variable file_size as positional parameter
);

请注意,不同的数据库访问模块实现不同的 paramstyle,并且需要不同的参数占位符(或合适的包装器)。

所有参数替换实现都应根据数据库后端的规则正确转义其参数,这是一个很好且重要的功能,因为您不必手动转义数据。