如何在Python中检查和执行SQL语句

2024-05-29 04:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中使用MySQLdb。我被告知要正确创建SQL语句并避免SQL注入攻击,我应该编写如下代码:

sql = "insert into table VALUES ( %s, %s, %s )"
args = var1, var2, var3
cursor.execute( sql, args )

或:

cursor.execute( "insert into table VALUES ( %s, %s, %s )", var1, var2, var3 )

或者甚至这个(这可能是错误的):

header = ( 'id', 'first_name', 'last_name' )
values = ( '12', 'bob'       , 'smith'     )
cursor.execute( "insert into table ( %s ) values ( %s )", ( header + values ) )

当我用PHP编程时,我通常会将整个SQL语句存储为一个长字符串,然后执行该字符串。类似于(使用PostgreSQL):

$id         = db_prep_string( pg_escape_string( $id         ) );
$first_name = db_prep_string( pg_escape_string( $first_name ) );
$last_name  = db_prep_string( pg_escape_string( $last_name  ) );

$query = "insert into table ( id, first_name, last_name ) values ( $id, $first_name, $last_name )"

$result = pg_query( $con, $query );
$retval = pg_fetch_array( $result );

其中db_prep_string

function db_prep_string( $value ) {
    if( 
        !isset( $value ) ||
        (is_null($value)) ||
        preg_match( '/^\s+$/', $value ) ||
        ( $value == '' )
     ) {
    $value = 'null';
}
else {
    $value = "'$value'";
}
    return $value;
}

然后为了调试,我可以简单地回显$query来查看整个SQL语句。我能用Python做些类似的事情吗?换句话说,我是否可以将safeSQL语句存储为字符串,打印出来进行调试,然后执行它?

我想做如下事情:

id         = prevent_sql_injection_string( id         )
first_name = prevent_sql_injection_string( first_name )
last_name  = prevent_sql_injection_string( last_name  )

sql  = "insert into table ( id, first_name, last_name ) values "
sql += id         + ", "
sql += first_name + ", "
sql += last_name

print sql #for debugging

cursor.execute( sql )        

如果不是,那么如何在Python中查看SQL语句的全部内容?

附加问题:如何使用Python在SQL语句中输入空值?


Tags: nameiddbsqlstringvaluetable语句

热门问题