web-gelistirme-sc.com

Python: ValueError: desteklenmeyen biçim karakteri '' '(0x27) dizin 1'de

PyShon kullanarak MySQL kullanarak bir veritabanında 3 tablo aramak için bir sorgu yürütmeye çalışıyorum. Her ne zaman aşağıdaki dizgiyi bir sorgu olarak çalıştırmaya çalışsam, bana dizgede bitiştirme hakkında bir hata veriyor.

"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"

Bu bana verdiği hatadır:

ValueError: unsupported format character ''' (0x27) at index 1

İstediği karakteri kaldırırsam, sorguyu gerçekten düzgün çalışmasını durduran% 'yi de kaldırmam gerekir. Bunu düzeltmek için ne yapabilirim, çünkü Python'da yeniyim.

Teşekkür ederiz, Kris

18
user1558746

Python% 'yi printf benzeri bir format karakteri olarak yorumluyor gibi gözüküyor. %% kullanmayı dene?

"SELECT fileid 
FROM files 
WHERE description LIKE '%%%s%%' 
    OR filename LIKE '%%%s%%' 
    OR uploader LIKE '%%%s%%' 
    ORDER BY fileid DESC" % (search, search, search)
55
Pochi

Sadece size bilgi için: Bugün Pypo'nun çözümünü Python 3.6'da denedim ve bir nedenden dolayı beklenmeyen davranışlara neden oldu. Format dizgisi için iki ve üç bağımsız değişkenim vardı, bu yüzden sonunda:

% (Search, Search)

Dizem ("search") üst bir "S" ile başladı. Hata mesajını aldım: 

ValueError: unsupported format character 'S' (0x53) at index 113

Büyük harfleri küçük harf olarak değiştirdim ve hataydı: 

TypeError: not enough arguments for format string

Sonra tartışmalarımı başlangıçtaki ve sondaki %% çiftinin içine koydum ve işe yaradı. Yani kodum şöyle görünüyordu: 

"SELECT fileid 
FROM files 
WHERE description LIKE '%%search%%' 
    OR filename LIKE '%%search%%'
    ORDER BY fileid DESC"

Başka bir çözüm @Alice Yuan tarafından sağlanan çözüm olacaktır. Sadece şarkıların yüzdesini iki katına çıkardı ve işe yarıyor.

0
vlad.rad

Çözümüm:

query = """SELECT id, name FROM provice WHERE name LIKE %s"""
cursor.execute(query, '%%%s%%' % name)

Bence bu sorunu çözmenin kolay yolu!

0
CK.Nguyen

böyle deneyebilirsiniz: 

SELECT fileid 
FROM files 
WHERE description LIKE '%%%%%s%%%%' 
OR filename LIKE '%%%%%s%%%%' 
OR uploader LIKE '%%%%%s%%%%' 
ORDER BY fileid DESC" % (search, search, search)
0
Alice Yuan