kuroの覚え書き

96の個人的覚え書き

NULLと空白文字

SQLiteでテーブルにinsertするとき、一部のカラムを指定しないままに行うと、指定されていないカラムにはNULLが入る。
これをSQLAlchemyでクエリを実行し、Python/FlaskでHTMLにレンダリングすると、NULLのカラムにはすべてNoneと表示される。
このままで別に大きな問題はないのだが、画面にNoneがいっぱい出てくると、それに埋もれてしまって、あとからUPDATEした項目が見にくい。
また、その後データをアップデートする際に

for comment_edit_target in session.query(table1).filter(table1.id == form.input_value.data).all():
                comment_edit_target.user1_comments = comment_edit_target.user1_comments + ' ' + form.user_comments.data
            session.commit()

こんな風に追加を入れようとすると、NULLにStringは足せないというふうなエラーが出てしまう。
なのでNULLを空白文字に置き換えておいたほうがよい。
素のSQLだと

sqlite> UPDATE table1 SET user1_comments = "" WHERE user1_comments IS NULL;

こんな感じで処理しておくと良い。
また、データをinsertする際に

q = select(["table1.id, '', '', '', '', '', '', '', '', '', ''"], from_obj=['table1'])
        ins = insert(User_comments).from_select((User_comments.id, User_comments.user1_comments, User_comments.user2_comments, User_comments.user3_comments, User_comments.user4_comments, User_comments.user5_comments, User_comments.user6_comments, User_comments.user7_comments, User_comments.user8_comments, User_comments.user9_comments, User_comments.user10_comments), q)
        conn = engine.connect()
        conn.execute(ins)

こんな感じに前もって空白文字を入れてしまっておいたほうがいいかもしれない。