Форум сайта python.su
0
Здравствуйте, не могу разобраться с параметром ? из db-api.
import sqlite3 conn = sqlite3.connect('example.db') c = conn.cursor() f = ('date text', 'trans text', 'symbol text', 'qty real', 'price real') c.execute('CREATE TABLE stocks (?,?,?,?,?)', f)
c.execute('CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)') conn.commit() purchases = ('2006-03-28', 'BUY', 'IBM', 1000, 45.00) c.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Офлайн
88
Похоже что параметризация в Cursor.execute не применяется к DDL.
Офлайн
4
Мне кажется Вам стоить подготовить строку запроса заранее:
var = 'CREATE TABLE stocks ({0},{1},{2},{3},{4})'.format('date text', 'trans text', 'symbol text', 'qty real', 'price real')
Отредактировано Loki (Март 15, 2013 12:54:21)
Офлайн
0
ShamanВ смысле к операциям типа CREATE, DROP и тп.?
Похоже что параметризация в Cursor.execute не применяется к DDL.
LokiПроблема в том, что столбцов у меня около 50ти, возможно увеличение. Названия и количество берутся из первой строки текстового фалика, т.е получаем список необходимых столбцов. Каким еще образом это решить, я придумать пока не могу.
Мне кажется Вам стоить подготовить строку запроса заранее:
Офлайн
88
lobziikДа. Но утверждать не буду - этот момент в документации не освещен, а я с таким случаем не сталкивался.
В смысле к операциям типа CREATE, DROP и тп.?
lobziik50 - это не проблема. Строковые шаблоны справятся.
Проблема в том, что столбцов у меня около 50ти, возможно увеличение.
f = ('date text', 'trans text', 'symbol text', 'qty real', 'price real') c.execute('CREATE TABLE stocks (%s)' % ','.join(['%s'] * len(f)) % f)
Отредактировано Shaman (Март 15, 2013 15:49:30)
Офлайн
0
ShamanНемножко не так сделал, но идея в общем такая.
50 - это не проблема. Строковые шаблоны справятся.
Никто не запрещает параметризовать и сам шаблон:
Офлайн