サンプル集  >  Python  >  MySQL sqlalchemy 追加
MySQL sqlalchemy 追加
2023/05/20

MySQLへsqlalchemyでレコードを追加します。

◆環境
OS Windows 10 Home 22H2 64bit OS x64 プロセッサ
Python 3.9.6
VS Code 1.59.0

MySQLのインストールとpythonのツールのインストールを行い最後にPythonでMySQLへレコードを追加するプログラムを作成します。

  1. MySQL検索 (不要)
  2. MySQL Communityダウンロード
  3. MySQLインストール (失敗)
  4. MySQLインストール
  5. MySQL接続確認
  6. sqlalchemyインストール
  7. プログラム作成

MySQL検索

GoogleでMySQLを検索します。


Downloadsをクリックします。


MySQL HeatWaveというページが表示されました。 これでいいのか少し疑問でしたが「Try Free」をクリックしました。


「Oracle.comに移動 日本」(日本語が少し変ですが)をクリックします。


「OCIで無料で使ってみる」をクリックしてみましたが何か違う感じでした。

最初のページまで戻り下にスクロールさせます。


「Trial Download」をクリックします。


「Sign In」をクリックします。


確か以前はアカウントなしでもダウンロードできたと思うのですが。 もう一度検索からやり直してみます。

MySQL Communityダウンロード

Googleで「MySQL」で検索しMySQL Communityのページを開きました。


「Download MySQL Community Edition」をクリックします。


「MySQL Community Downloads」をクリックします。


一見同じインストーラーが2つあるように見えましたが、よく見ると上のインストーラーは「(mysql-installer-web-community-8.0.33.msi)」とwebという名前がついていました。 下の「Download」をクリックします。


ログインを促す画面が表示されました。 「No thanks, just start my download.」をクリックします。

以下のファイルがダウンロードされました。

mysql-installer-community-8.0.33.msi

MySQLインストール

ダウンロードしたファイルを右クリックします。


「インストール」をクリックします。


はじめてインストールするはずですが「Welcome Back!」と表示されているのが気になります。

「Next」をクリックします。


Productを全部選択します。


「Next」をクリックします。


「Execute」をクリックします。


「Next」をクリックします。


「Next」をクリックします。


「Next」をクリックします。


「Execute」をクリックします。


「Finish」をクリックします。


「Next」をクリックします。


「Finish」をクリックします。


MySQL Serverを選択します。


「Modify」をクリックします。


なにか違う感じなので「Cancel」をクリックし戻りました。


MySQL Serverの列の右に表示されているReconfigureをクリックします。


「Next」をクリックします。


「Next」をクリックします。


Current Root Passwordの入力欄がでていますが何を入力すればいいのかわからなかったので戻りました。


「Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)を選択し「Next」をクリックします。

また同じ画面でCurrent Root Passwordの入力欄がでてきて何を入力すればいいのかわからないので進めなくなりました。

行き詰ったのでMySQLをアンインストールしました。

MySQLインストール

ダウンロードしたファイルを右クリックします。


「インストール」をクリックします。


「Next」をクリックします。


「Next」をクリックします。 既にフォルダがあるため上書きするかの確認が表示されたので上書きを選択しました。


「Execute」をクリックします。


「Next」をクリックします。


「Next」をクリックします。


Portをデフォルトの3306から23306に変えました。 「Next」をクリックします。


「Next」をクリックします。


「MySQL Root Password」と「Repeat Password」を入力します。


「Next」をクリックします。


「Next」をクリックします。


「Next」をクリックします。


「Execute」をクリックします。


「Finish」をクリックします。


「Next」をクリックします。


「Finish」をクリックします。


「Next」をクリックします。


Passwordを入力します。


「Next」をクリックします。


「Execute」をクリックします。


「Finish」をクリックします。


「Next」をクリックします。


「Finish」をクリックします。

しばらくすると自動でMySQL Shellが起動しました。


続けてMySQL Workbenchも起動しました。


無事インストールできたようです。

MySQL接続確認

コマンドプロンプトを開きMySQLへの接続確認をします。

C:\>cd "\Program Files\MySQL\MySQL Server 8.0\bin"

C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -P 23306 -u root -p
Enter password: *********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input s
tatement.

mysql> exit
Bye

正常に接続できました。

sqlalchemyインストール

sqlalchemyをインストールします


mysql-connector-pythonをインストールします


PyMySQLをインストールします


pipをアップデートします。


プログラム作成

CodeIgniter+MySQLで作成したaisatsuテーブルにレコードを追加するプログラムを作成します。

mysqlIns.py
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String

db_url="mysql+mysqlconnector://" \
       "user:pass@localhost:23306/mydb?charset=utf8"
print(db_url)

engine = create_engine(db_url)
print(engine)

db_session = scoped_session(
    sessionmaker(
        autocommit=False,
        autoflush=False,
        bind=engine
    )
)
print(db_session)

Base = declarative_base()
Base.query = db_session.query_property()

class aisatsu(Base):
    __tablename__ = "aisatsu"

    id = Column(Integer, primary_key = True, autoincrement=True)
    text = Column(String, unique=False)

    def __init__(self, text):
        self.text = text

def add_data():
    row = aisatsu(text='こんにちわ')
    db_session.add(row)
    row = aisatsu(text='おはよう')
    db_session.add(row)
    row = aisatsu(text='Hello')
    db_session.add(row)

    db_session.commit()

add_data()

実行してみます。

PS C:\pywork> py .\mysqlIns.py
mysql+mysqlconnector://user:pass@localhost:23306/mydb?charset=utf8
Engine(mysql+mysqlconnector://user:***@localhost:23306/mydb?charset=u
tf8)
<sqlalchemy.orm.scoping.scoped_session object at 0x000001A8EEB52F10>

特にエラーは出ませんでした。

データベースを確認してみます。

mysql> select * from aisatsu;
+----+------------+
| id | text       |
+----+------------+
|  1 | こんにちわ |
|  2 | おはよう   |
|  3 | Hello      |
+----+------------+
3 rows in set (0.00 sec)

期待通りにデータが追加されていました。

▲ PageTop  ■ Home


Copyright (C) 2023 ymlib.com