3

整数値のコンテンツを文字列として保存すると、それを取得すると突然 int になります。

だからここに私が見ているものがあります:私はこれで保存します

db = get_db()
hello = escape(str(request.form['name'])).striptags()
what = escape(str(request.form['content'])).striptags()
db.execute('''insert into entry (
title, content, score, approved, pub_date) values (?, ?, 0, 0,?)''',
[hello,what,int(time.time())])
raise Exception('what')
db.commit()

form['name']='1'そして、ページから送信するときは、とform['content']='2'、 で 、Exceptionhello==u'1'言いますcontent==u'2'。ここまでは順調です。次に、に保存しDBますが、検索に行くと、突然、エントリがタイプint 12. 他の文字列、たとえば"lorem ispum".

mysql schemaでは、titlecontentはどちらも typestringです。どうしたの?

4

1 に答える 1

1

SQLiteで任意の列タイプを使用しても、この列がこのタイプの値のみを格納できることを保証するものではないことに注意してください。引き続き、任意のタイプの値を格納できます。

あなたのケースで起こっていることは、あなたの列がINTEGERまたはNUMERICアフィニティを持っていることだと思います。この場合、SQLiteは通常INTEGERタイプの値を格納します。ただし、INTEGERにロスレスでキャストできないデータを保存しようとすると、SQLiteは自動的にそれをTEXTに変換します。(または、列がTEXTアフィニティである可能性がありますが、Pythonは、整数のように見える場合、このフィールドにINTEGERとして格納するように強制しました)。

これについて詳しくは、 SQLiteのドキュメントをご覧ください。2.0TypeAffinityまでスクロールしてください。

于 2012-12-25T06:42:43.070 に答える