From da1f8acaba97656cec1d63fbc00311265cb2691c Mon Sep 17 00:00:00 2001 From: cuiweizhi <560397@gree.com.cn> Date: Sat, 11 Nov 2023 18:22:48 +0800 Subject: [PATCH] Update project --- application/config/config.yaml | 11 ++++++----- application/extensions/init_sqlalchemy.py | 14 +++++++++++++- application/libs/tasks/task.py | 7 ++++--- application/models/user.py | 18 ++++++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/application/config/config.yaml b/application/config/config.yaml index 15ee82a..0fa3f99 100644 --- a/application/config/config.yaml +++ b/application/config/config.yaml @@ -2,13 +2,14 @@ System: Env: public Database: - Type: mysql - Driver: pymysql - Username: root + Type: postgresql + Driver: psycopg2 + Username: postgres Password: localhost123 Host: localhost - Port: 3306 + Port: 5432 DB: elp + TableName: user Elasticsearch: Host: 172.28.5.39 @@ -39,6 +40,6 @@ Redis: DB: 13 Scheduler: - Start: 2023-11-11 15:34:00 + Start: 2023-11-11 18:20:00 End: 2099-11-11 16:00:00 Timezone: Asia/Shanghai diff --git a/application/extensions/init_sqlalchemy.py b/application/extensions/init_sqlalchemy.py index e9eaa5b..2ca03dd 100644 --- a/application/extensions/init_sqlalchemy.py +++ b/application/extensions/init_sqlalchemy.py @@ -12,6 +12,7 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import text from application.utils import DatabaseUri @@ -39,4 +40,15 @@ def init_database(app: Flask) -> None: db.app = app db.init_app(app) with app.app_context(): - db.create_all() + db.session.execute(text(""" + CREATE TABLE IF NOT EXISTS users ( + id SERIAL NOT NULL, + username VARCHAR(80) NOT NULL, + email VARCHAR(120) NOT NULL, + password VARCHAR(255) NOT NULL, + active BOOLEAN, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + PRIMARY KEY (id, created_at) + ) PARTITION BY RANGE (created_at); + """)) + db.session.commit() diff --git a/application/libs/tasks/task.py b/application/libs/tasks/task.py index beda166..0007b70 100644 --- a/application/libs/tasks/task.py +++ b/application/libs/tasks/task.py @@ -10,6 +10,7 @@ # @Description : """ +import datetime from application.extensions.init_sqlalchemy import db from application.models import User @@ -22,7 +23,7 @@ def task(): """ with db.app.app_context(): print("create user") - user = User(username="CWZ", email="Stu@outlook.com", password="qwe!2345", active=True) - db.session.add(user) - db.session.commit() + user = User(username="CWzz", email="Stuu@outlook.com", password="qwe!2345", active=True, + created_at=datetime.datetime.utcnow()) + user.save() print("created user admin") diff --git a/application/models/user.py b/application/models/user.py index 0a84600..e53a6f1 100644 --- a/application/models/user.py +++ b/application/models/user.py @@ -10,6 +10,8 @@ # @Description : """ +from datetime import datetime +from sqlalchemy import text from sqlalchemy.ext.hybrid import hybrid_property from application.extensions.init_bcrypt import bcrypt @@ -18,12 +20,14 @@ from application.extensions.init_sqlalchemy import db class User(db.Model): """Basic user model""" + __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(80), unique=True, nullable=False) _password = db.Column("password", db.String(255), nullable=False) active = db.Column(db.Boolean, default=True) + created_at = db.Column(db.DateTime, nullable=False) @hybrid_property def password(self): @@ -47,3 +51,17 @@ class User(db.Model): def __repr__(self) -> str: return f'' + + def save(self): + partition_date = self.created_at.strftime('%Y_%m') + partition_name = f'users_{partition_date}' + + with db.session.begin_nested(): + db.session.execute(text(f""" + CREATE TABLE IF NOT EXISTS {partition_name} PARTITION OF users + FOR VALUES FROM ('{self.created_at.strftime('%Y-%m-01')}') TO + ('{self.created_at.strftime('%Y-%m-01')}'::date + interval '1 month'); + """)) + db.session.add(self) + db.session.commit() + -- GitLab