कई तरीकों से। नहीं, वास्तविक कोड में सबसे स्पष्ट एक (%
साथ %s
) का उपयोग करते हैं यह attacks के लिए खुला है।
यहाँ कॉपी-paste'd from pydoc of sqlite3:
# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
अधिक उदाहरण अगर आप की जरूरत है:
# Multiple values single statement/execution
c.execute('SELECT * FROM stocks WHERE symbol=? OR symbol=?', ('RHAT', 'MSO'))
print c.fetchall()
c.execute('SELECT * FROM stocks WHERE symbol IN (?, ?)', ('RHAT', 'MSO'))
print c.fetchall()
# This also works, though ones above are better as a habit as it's inline with syntax of executemany().. but your choice.
c.execute('SELECT * FROM stocks WHERE symbol=? OR symbol=?', 'RHAT', 'MSO')
print c.fetchall()
# Insert a single item
c.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', ('2006-03-28', 'BUY', 'IBM', 1000, 45.00))
दिलचस्प, यह क्यों वार्स के साथ अलग से की बजाय एक सरणी में काम करता है (var1, var2, var3)? – Andomar
डीबी एपीआई चश्मा के अनुसार, ऐसा लगता है कि यह किसी भी तरह से हो सकता है: http://www.python.org/dev/peps/pep-0249/ –
http://docs.python.org/2/library/ sqlite3.html # – earthmeLon