目次
仮想環境作成
venv パッケージがあるか確認(標準搭載のはず)
sudo apt update sudo apt install python3-venv -y
プロジェクトディレクトリ作成
mkdir myproject cd myproject
仮想環境作成(プロジェクトディレクトリにて作成)
python3 -m venv myenv
仮想環境の有効化
source myenv/bin/activate
仮想環境の無効化(終了)
作業が終わったら以下で無効化します。
deactivate
ライブラリインストール
PIP インストール
sudo apt update sudo apt install python3-pip
MySQL コネクター
sudo apt update pip install mysql-connector-python
Excel 読み取り pands openpyxl
sudo apt update pip install pandas openpyxl
Vs Codeで、仮想環境を認識する
VS Code で myproject フォルダを開く
Ctrl+Shift+P → 「Python: Interpreter を選択」→ ./myenv/bin/python を選択
python MySQL ソースコード
データベースの条件(必要に応じてソースコードを変更)
データベース名:eng001
ユーザー;root
パスワード:root
ホスト名:
ソースコード
# pip install mysql-connector-python
import mysql.connector
from mysql.connector import Error
import pandas as pd
import openpyxl
#
# DSN(Data Source Name)を使用して接続設定を取得
# dsn(host='locakhost', user='root', password="root", database='mysql', port=3306)
def dsn(host, user, password, database, port=3306):
config = {
'host': host,
'user': user,
'password': password,
'database': database,
'port': port
}
return config
def dsn_admin():
config = {
'host': 'localhost', # MySQL Server のホスト名または IP アドレス
'user': 'root', # MySQL のユーザー名
'password': 'root', # MySQL のパスワード
'database': 'eng001', # 接続するデータベース名
'port': 3306 # MySQL のポート番号(デフォルトは 3306)
}
return config
def dsn_user():
config = {
'host': 'localhost',
'user': 'db_user',
'password': 'db_user',
'database': 'eng001',
'port': 3306
}
return config
def test_connection():
try:
dsn_config = dsn_user()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
print("✅ MySQL に接続できました!")
server_info = connection.get_server_info()
print("MySQL Server バージョン:", server_info)
except Error as e:
print("❌ 接続エラー:", e)
def create_database():
try:
dsn_config = dsn_admin()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
strsql = """
CREATE DATABASE eng001p
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
"""
cursor.execute(strsql)
connection.commit()
print("✅ データベースが作成されました。")
except Error as e:
print("❌ エラー:", e)
def drop_database():
try:
dsn_config = dsn_admin()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
strsql = "DROP DATABASE IF EXISTS eng001p;"
cursor.execute(strsql)
connection.commit()
print("✅ データベースが削除されました。")
except Error as e:
print("❌ エラー:", e)
def create_user_grant():
try:
dsn_config = dsn_admin()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
# ユーザーの作成
cursor.execute("CREATE USER 'db_user'@'%' IDENTIFIED BY 'db_user';")
# 権限の付与
cursor.execute("GRANT ALL PRIVILEGES ON eng001.* TO 'db_user'@'%';")
connection.commit()
print("✅ ユーザーと権限が作成されました。")
except Error as e:
print("❌ エラー:", e)
def create_table_user_master():
try:
dsn_config = dsn_user()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
strSql = """
CREATE TABLE IF NOT EXISTS user_master (
id CHAR(16) NOT NULL PRIMARY KEY,
name TEXT,
pass TEXT,
mail TEXT,
rights INT
);
"""
cursor.execute(strSql)
connection.commit()
print("✅ テーブルが作成されました。")
except Error as e:
print("❌ エラー:", e)
def drop_table_user_master():
try:
dsn_config = dsn_user()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
strSql = "DROP TABLE user_master;"
cursor.execute(strSql)
connection.commit()
print("✅ テーブルが削除されました。")
except Error as e:
print("❌ エラー:", e)
def add_user_master():
try:
dsn_config = dsn_user()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
data = [
("user000", "三田 さやか", "pas000", "user00@gmail.com", 0),
("user001", "須田 翼", "pas001", "mail01@gmail.com", 1),
("user002", "前田 直行", "pas002", "mail02@gmail.com", 1),
("user003", "須田 翼", "pas003", "mail03@gmail.com", 1),
("user004", "林 香奈子", "pas004", "mail04@gmail.com", 1),
("user005", "中川 修子", "pas005", "mail05@gmail.com", 1),
]
strSql = """
INSERT INTO user_master (id, name, pass, mail, rights)
VALUES (%s, %s, %s, %s, %s)
"""
cursor.executemany(strSql, data)
connection.commit()
print("✅ データが追加されました。")
except Error as e:
print("❌ エラー:", e)
def select_user_master():
try:
dsn_config = dsn_user()
with mysql.connector.connect(**dsn_config) as connection:
if connection.is_connected():
with connection.cursor() as cursor:
strSql = "SELECT * FROM user_master;"
cursor.execute(strSql)
result = cursor.fetchall()
for row in result:
print(row)
except Error as e:
print("❌ エラー:", e)
def insert_users_from_excel(file_path):
# Excelからデータを読み込み
df = pd.read_excel(file_path, engine='openpyxl')
# 欠損値チェック
if df.isnull().values.any():
print("⚠️ Excelに欠損データがあります。")
return
# 登録用のタプルリストに変換
records = list(df.itertuples(index=False, name=None))
dsn_config = dsn_user()
try:
with mysql.connector.connect(**dsn_config) as connection:
connection.autocommit = False
if connection.is_connected():
with connection.cursor() as cursor:
sql = """
INSERT INTO user_master (id, name, pass, mail, rights)
VALUES (%s, %s, %s, %s, %s)
"""
cursor.executemany(sql, records)
connection.commit()
print("✅ Excelからのデータ登録完了")
except mysql.connector.Error as e:
print("❌ エラー:", e)
# ロールバックは接続確認後に限定
try:
if 'connection' in locals() and connection.is_connected():
connection.rollback()
print("🔁 ロールバックしました。")
except:
pass
def test_transaction():
try:
# DSN(Data Source Name)を使用して接続設定を取得
dsn_config = dsn_user()
connection = mysql.connector.connect(**dsn_config)
if connection.is_connected():
print("✅ MySQL に接続できました!")
server_info = connection.get_server_info()
res = connection.cmd_query("SHOW TABLE STATUS WHERE Name = 'user_master';")
print("テーブル情報:", res)
print("MySQL Server バージョン:", server_info)
except Error as e:
print("❌ 接続エラー:", e)
finally:
if 'connection' in locals() and connection.is_connected():
connection.close()
print("🔒 接続を閉じました。")
# エントリーポイント
if __name__ == "__main__":
test_connection()
# create_database()
# create_user_grant()
# drop_database()
# drop_table_user_master()
create_table_user_master()
add_user_master()
select_user_master()
# 実行(ファイルパスを指定)
# insert_users_from_excel("book1.xlsx")
