python: sqlalchemy – 1366, “Incorrect integer value:【MySQL】

プログラミング
スポンサーリンク




スポンサーリンク

内容

sqlalchemyでデータを登録しようとしたところ、エラーが発生しました。(赤字のとこらへんで発生しました)

↓ソースコード

# ①必要なモジュールをインポート
import sqlalchemy.ext.declarative
import sqlalchemy.orm

# ②DBのオブジェクト(engine)を生成
# パスの構成
# []+[]://[ユーザー名]:[パスワード]@[IPアドレスorホスト名]/[DB名]
engine = sqlalchemy.create_engine("mysql+pymysql://root:@127.0.0.1/test_db")

# ③メタクラスの生成
Base = sqlalchemy.ext.declarative.declarative_base()


# ④メタクラスを継承し、テーブル情報を定義したクラスの生成
class User(Base):
    __tablename__ = "user"
    user_id = sqlalchemy.Column(
        sqlalchemy.String(30), primary_key=True
    )

    password = sqlalchemy.Column(
        sqlalchemy.String(30)
    )


# ⑤定義したテーブル情報をDBと紐付ける(紐づくテーブルがない場合、生成される。)
Base.metadata.create_all(engine)


# ⑥DB内にアクセスするするためのオブジェクト(session)を生成
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()

# ⑦レコードを追加する
user = User(user_id="admin", password="admin")
session.add(user)
session.commit()

↓エラー

1366, "Incorrect integer value:

このエラーは、定義と違う変数型のデータを登録しようとすると、発生するエラーのようです。

(例) Integer型のカラムに文字列を代入する

user_idとpasswordは文字列型で、代入しようとしているデータも文字列型なのでエラーは出ないと思いますが…

原因

test_db内のテーブルを見ていると、user_idがInteger型のuserテーブルが存在していました。

どうやらこのテーブルに登録を行おうとしていたので、エラーが発生していたようです。

前作ったけど必要なくて消したはずですが、残ってたみたいです

対処法

下記のSQL文を使用し、既存のhistoryテーブルを削除することで、解決できました。

> drop table user;

コメント

タイトルとURLをコピーしました