aa
This commit is contained in:
84
saars/backend/scripts/create_database.py
Normal file
84
saars/backend/scripts/create_database.py
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
创建项目所需 MySQL 数据库(liaotian_db)。
|
||||
从环境变量 DATABASE_URL 或下方默认值读取连接信息,连接后执行 CREATE DATABASE。
|
||||
用法:
|
||||
cd backend && python scripts/create_database.py
|
||||
或指定: export DATABASE_URL='mysql+pymysql://user:pass@host:port/liaotian_db?charset=utf8mb4'
|
||||
python scripts/create_database.py
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
# 与 app/config.py 中默认一致,不导入 app 以免依赖 Flask 等
|
||||
DEFAULT_DATABASE_URL = (
|
||||
"mysql+pymysql://root:!Rjb12191@"
|
||||
"gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/"
|
||||
"liaotian_db?charset=utf8mb4"
|
||||
)
|
||||
|
||||
|
||||
def parse_database_url(url):
|
||||
"""从 DATABASE_URL 解析 host, port, user, password, database。"""
|
||||
# mysql+pymysql://user:password@host:port/database?query
|
||||
m = re.match(
|
||||
r"mysql\+pymysql://([^:]+):([^@]+)@([^/:]+):(\d+)/([^?]+)",
|
||||
url.strip(),
|
||||
)
|
||||
if not m:
|
||||
raise ValueError("DATABASE_URL 格式应为: mysql+pymysql://user:pass@host:port/dbname?charset=utf8mb4")
|
||||
user, password, host, port, database = m.groups()
|
||||
import urllib.parse
|
||||
password = urllib.parse.unquote(password)
|
||||
return {
|
||||
"host": host,
|
||||
"port": int(port),
|
||||
"user": user,
|
||||
"password": password,
|
||||
"database": database.strip("/"),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
url = os.getenv("DATABASE_URL", DEFAULT_DATABASE_URL)
|
||||
try:
|
||||
params = parse_database_url(url)
|
||||
except Exception as e:
|
||||
print("解析 DATABASE_URL 失败:", e)
|
||||
sys.exit(1)
|
||||
|
||||
db_name = params["database"]
|
||||
print(f"连接 {params['host']}:{params['port']} (用户 {params['user']}),创建数据库: {db_name}")
|
||||
|
||||
try:
|
||||
import pymysql
|
||||
except ImportError:
|
||||
print("请先安装: pip install pymysql")
|
||||
sys.exit(1)
|
||||
|
||||
# 连接时不指定 database,才能执行 CREATE DATABASE
|
||||
conn = pymysql.connect(
|
||||
host=params["host"],
|
||||
port=params["port"],
|
||||
user=params["user"],
|
||||
password=params["password"],
|
||||
charset="utf8mb4",
|
||||
)
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
|
||||
% db_name
|
||||
)
|
||||
conn.commit()
|
||||
print(f"数据库 {db_name} 已存在或已创建成功。")
|
||||
except Exception as e:
|
||||
print("创建失败:", e)
|
||||
sys.exit(1)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user