olarak Sorgu parametreleri onlar SQL enjeksiyonu gelen karakterlidir öyle ki, adlandırılmış sözlük olarak MySQLdb
ait cursor.execute()
yöntemine sorgu parametrelerini geçmek istiyorum. http://mysql-python.sourceforge.net/MySQLdb.html diyorPython MySQLdb: adlandırılmış sözlüğe
>>>c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb manuel: arayüzü tarafından beklenen biçimlendirmeyi parametre işaretçisi türünü belirten
* PARAMSTYLE
dize sabiti Bu KeyError verir neden
açıklayabilir. 'Format' = ANSI C printf biçim kodları, ör. '... NEREDE =% s'. Eğer connect.execute() için bir eşleme nesnesi kullanılırsa, arayüz aslında 'pyformat' = Python genişletilmiş format kodlarını kullanır, örn. '... WHERE adı =% (isim) s'. Ancak, API halen PARAMSTYLE birden fazla stil belirtilmesine izin vermez * belgelerinde çizgi sorunuza cevap verebilir yapıştırılan neyi aşağıdaki
*** sütun değeri ekliyorum ***. Belgedeki satır aşağıdaki kodun yasa dışı olduğu anlamına gelir: 'c.execute ('% s konumundan kullanıcı adı =% s' seçin, ('users', 'bob')) – mercador
@mercador Right, the '% s' parçasından, tablo adını parametrelemeye çalıştığınız için hataya neden olan şey budur. "Execute" işlevini bu şekilde kullanmanın yararı, SQL enjeksiyonunu önlemeye yardımcı olmasıdır, ancak uygun güvenlik önlemlerini alırsanız (bu konuda uzman değilim, ancak parametrelerin doğru bir şekilde sterilizasyonunu/sızmasını gerektirir) Sorguyu oluşturmak için Python'un dize biçimlendirmesini kullanır ve daha sonra 'execute' öğesine iletir. Yine, SQL enjeksiyonu ana endişe. Bu yardımcı olur umarım! – RocketDonkey