55232


python 上でsqlite の alter table文のカラム名を変数定義できません。

select文・update文・insert文・delete文は、出来たのですがalter文だけエラーが出ます。

例えば、delete文だと当然以下で動作しました。

[code]

    sql_del = 'DELETE FROM 作業員のタイムスタンプ WHERE NOT (担当者 like ? or 担当者 like ?)'
    worker = ('作業員1%','下回り専属%',)
    cur.execute(sql_del,worker)
    
[/code]

select文等でも同様に「？」を使って検索条件の変数定義できました。

alter文だと以下で`OperationalError: near "?": syntax error`のエラーが発生します。

[code]

    sql_alt = 'alter table 各号機の時系列 add column ? CHAR(30)'
    new_col = ('new_col',)
    cur2.execute(sql_alt,new_col)
    
[/code]

ひょっとしてalter文だけ「？」を使って変数定義できないのでしょうか？  
ご指導よろしくお願いいたします。


CC BY-SA 4.0
2019-05-25T01:17:34.110
55231
2019-05-25T05:46:39.370
2019-05-25T05:46:39.370
3060
34450
question
python sqlite
python 上でsqlite の alter table文でカラム名を変数定義できない


基本的に，DataBase上で定義された文字は ? で置き換えられないと考えたほうがいいかもしれません．  
例えば，テーブル名やカラム名などはデータベース上で定義された文字なので，? を使って変数を挿入できません．? が使えるのはあくまでパラメータのみでしょう．  
こういう時はpython文字列 %s を使えば解決できます．  
質問者様のクエリーを例に書き直してみます．

[code]

    cur2.execute("alter table 各号機の時系列 add column %s char(50)" % new_col)
    
[/code]

ただ，セキュリティを考えると，クエリーに文字列を使うこと自体があまりよくないみたいなので，多用するのは控えたほうがいいかもしれませんね．  
一応，レファレンスも載っけておきます．  
<https://docs.python.org/ja/3/library/sqlite3.html#>


CC BY-SA 4.0
2019-05-25T01:56:24.900
55232
2019-05-25T01:56:24.900
29506
55231
answer