Форум сайта python.su
Привет всем :)
Вот нужно выполнить элементарный запрос к базе MySQL:
db.execute( r'SELECT ID FROM %s WHERE BINARY URL = "%s";' %(table_name,some_string) )
Отредактировано (Окт. 11, 2007 14:19:31)
Офлайн
Если говорим именно об sqlalchemy - попробуц переделать на
db.execute( text(r'SELECT ID FROM %s WHERE BINARY URL = "%s";' %(table_name,some_string)) )
Офлайн
Спасибо за совет. Но text() не помогает. Все равно db.execute( text(“%s”) ) приводит к TypeError. :(
Только несколько непрофильное использоввание - через алхимию raw запросы гонятьДа, конечно. Везде в скрипте я использую доступ через функции sqlalchemy и методы класса Table. (без orm). Но не смог найти, как задать BINARY в условии WHERE, поэтому и пытаюсь через текстовый запрос.
Офлайн
А если попробовать вытащить текст sql-запроса в отдельную текстовую переменную, а потом уже подсовывать её execute'у?
Типа: querry=“SELECT ID FROM %s WHERE BINARY URL = %s” %(table_name, some_string)
db.execute(querry)
Кстати, возможно вторую %s следует заменить на ? (знак вопроса), а some_string убрать из текстовой строки и добавить в качестве параметра к execute'у, т.е.:
querry=“SELECT ID FROM %s WHERE BINARY URL = ?” %(table_name)
db.execute(querry, some_string)
Офлайн
пиши через запятую
db.execute( r'SELECT ID FROM %s WHERE BINARY URL = “%s”;', (table_name,some_string) )
работать с запросами как со строками - глупо и небезопасно
Офлайн
slav0nic
А мне на этом же форуме так делать и посоветовали.
r - для чего? Что она делает?
Офлайн
FoxPython
slav0nic
А мне на этом же форуме так делать и посоветовали.
r - для чего? Что она делает?
>>> print 'line1\nline2'
line1
line2
>>> print r'line1\nline2'
line1\nline2
Офлайн
Можно сделать чтото типа такого:
from sqlalchemy.sql import select from sqlalchemy import text select([table_name.c.id], text("BINARY %s" % (test_table.c.url==some_string)))
>>> from sqlalchemy.sql import text >>> s = text("""SELECT users.fullname || ', ' || addresses.email_address AS title ... FROM users, addresses ... WHERE users.id = addresses.user_id AND users.name BETWEEN :x AND :y AND ... (addresses.email_address LIKE :e1 OR addresses.email_address LIKE :e2) ... """) sql>>> print conn.execute(s, x='m', y='z', e1='%@aol.com', e2='%@msn.com').fetchall()
Отредактировано (Май 12, 2008 13:21:33)
Офлайн