2017-02-06 15 views
0

Итак, у меня есть следующий вопрос при обновлении моей базы данных:Как обновить столбец в SQLite с помощью pysqlite, где мне сначала нужно было получить условное значение из других данных в моей таблице?

У меня есть столбец в моей таблице, что мне нужно разделить на три по существу и поэтому я следующий код:

with con: 
    cur = con.cursor() 
    cur.execute('SELECT Column1 FROM MainTable') 
    while True row = cur.fetchone() 
    if row == None: 
     break 
for line in row: a, b, c= line.split('-') 
    print (b); 

, который дает me значения второго столбца, например. Однако, мне нужно обновить, что второй столбец с теми значениями, и для этого я попытался добавить следующее в нижней части:

cur.execute('UPDATE MainTable SET Col_2 = ?' WHERE Id = 1, (row, Id)) 

con.commit() 

Однако, по каким-то причинам это не работает хорошо.

+0

Вероятно, не связаны - вам не хватает, где положение в вашем обновлении. пожалуйста, проверьте – GurV

+0

. Я начал заниматься редактированием длинной строки кода, а затем понял, что не знаю, что здесь происходит: 'while True cur.fetchone == None Break;'. Правильно отформатируйте свой код, чтобы можно было увидеть точное представление; который предшествует линии, которую вы находите, не работает. – roganjosh

+0

Здравствуйте, я немного отредактировал, потому что вы правы, и первая строка кода была неправильной. –

ответ

0

Чтобы обновить определенную строку, вам нужен способ определения строки. У вас, кажется, есть столбец «ID», поэтому прочитайте это вместе со строкой, которую вы хотите разделить.

SQL-заявления имеют ничего сделать с Python; то, что вы делаете в Python, - это построить строку SQL, которую вы затем передаете в базу данных для выполнения. (Использование ? -Style параметров позволяет избежать проблем строки форматирования и атак с внедрением SQL;. Всегда использовать их для значений)

cur.execute('SELECT ID, Column1 FROM MainTable') 
for id, col1 in cur.fetchall(): 
    a, b, c = col1.split('-') 
    cur.execute('UPDATE MainTable SET ColA = ?, ColB = ?, ColC = ? WHERE ID = ?', 
       [a, b, c, id]) 
con.commit()