os.path.joinとsqliteが一緒に遊んでいない
質問
Python 2.7(Windows)
for root, dirs, files in os.walk(self.DiskLocation, topdown=False):
for name in files:
path = os.path.join(root, name)
print path #check it's what we think it is
self.cur.execute("SELECT * from myTable WHERE Path = ?", (path))
.
はこれを降伏します...
SQLite3.Programmingerror:指定されたバインドの数が正しくありません。現在のステートメントは1を使用し、54が供給されています。
私のパス変数が54文字であることを認識するまで、54の付属のバインディングがどのようになっているかについて本当に混乱していました。しかし、SQLiteが文字列ではなく文字の長い文字数として解釈されているのはなぜですか。
解決
execute
の2番目の引数は sequence です。
(path)
を書きましたが、それらは通常の括弧ですので、それはpath
と同じです。文字列は文字のシーケンスであり、したがってPythonはあなたが提供したシーケンス内の54文字のすべてに沿って忠実に渡されます。
あなたが欲しいものは(path,)
です。これは1つの要素のタプルです。
タプルはコンマで作成され、ではなく括弧で囲まれています。
これが混乱している場合は、[path]
を使用することができます。ここでもリストが大丈夫です。:)
所属していません StackOverflow