(kein Duplikat Ich weiß, dass es eine Möglichkeit gibt, dies zu tun, das funktioniert:.. Parameter substitution for a SQLite "IN" clause)Warum funktioniert das nicht? WO IN
Ich würde gerne wissen, was ich in diesen Code bin fehle. Ich baue einen einfachen Tisch. Dann kopiere ich erfolgreich einige seiner Datensätze in eine neue Tabelle, wo die Datensätze durch eine WHERE-Klausel qualifiziert sind, die zwei Listen umfasst. Nachdem ich diese Tabelle geworfen habe, versuche ich, dieselben Datensätze zu kopieren, aber dieses Mal lege ich die Liste in eine Variable, die ich in die SQL-Anweisung einfüge. Diesmal werden keine Datensätze kopiert.
Wie kommt es?
import sqlite3
conn = sqlite3.connect(':memory:')
curs = conn.cursor()
oldTableRecords = [ [ 15, 3 ], [ 2, 1], [ 44, 2], [ 6, 9 ] ]
curs.execute('create table oldTable (ColA integer, ColB integer)')
curs.executemany('insert into oldTable (ColA, ColB) values (?,?)', oldTableRecords)
print ('This goes ...')
curs.execute('''create table newTable as
select * from oldTable
where ColA in (15,3,44,9) or ColB in (15,3,44,9)''')
for row in curs.execute('select * from newTable'):
print (row)
curs.execute('''drop table newTable''')
print ('This does not ...')
TextTemp = ','.join("15 3 44 9".split())
print (TextTemp)
curs.execute('''create table newTable as
select * from oldTable
where ColA in (?) or ColB in (?)''', (TextTemp,TextTemp))
for row in curs.execute('select * from newTable'):
print (row)
Ausgang:
This goes ...
(15, 3)
(44, 2)
(6, 9)
This does not ...
15,3,44,9
TIA!
Warum 'TextTemp = '' join ("15 3 44 9" .split())' statt von nur ''15, 3,44,9''? –
Weil ich geistesabwesend bin. –
Das ist ein ziemlich guter Grund :-) –