feat: /test createdb — создание БД через API
This commit is contained in:
@@ -9,7 +9,6 @@ load_dotenv()
|
|||||||
class ContractsApp:
|
class ContractsApp:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.app = Flask(__name__)
|
self.app = Flask(__name__)
|
||||||
db.ensure_db()
|
|
||||||
self.add_routes()
|
self.add_routes()
|
||||||
|
|
||||||
def add_routes(self):
|
def add_routes(self):
|
||||||
|
|||||||
+23
-3
@@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
from flask import Blueprint, jsonify, request
|
from flask import Blueprint, jsonify, request
|
||||||
import db
|
import db
|
||||||
|
|
||||||
@@ -14,9 +15,10 @@ def test():
|
|||||||
return jsonify({
|
return jsonify({
|
||||||
"db": "ok" if conn else f"fail: {err}",
|
"db": "ok" if conn else f"fail: {err}",
|
||||||
"actions": [
|
"actions": [
|
||||||
"GET /test — статус БД",
|
"GET /test — статус БД",
|
||||||
"POST /test SQL:... — выполнить запрос",
|
"POST /test createdb — создать БД",
|
||||||
"POST /test tables — список таблиц",
|
"POST /test tables — список таблиц",
|
||||||
|
"POST /test SQL:... — выполнить запрос",
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -36,6 +38,24 @@ def test():
|
|||||||
return jsonify({"error": err}), 500
|
return jsonify({"error": err}), 500
|
||||||
return jsonify({"tables": [r[0] for r in result["rows"]]})
|
return jsonify({"tables": [r[0] for r in result["rows"]]})
|
||||||
|
|
||||||
|
if action == "createdb":
|
||||||
|
try:
|
||||||
|
conn = db._pg_connect("postgres")
|
||||||
|
conn.autocommit = True
|
||||||
|
cur = conn.cursor()
|
||||||
|
db_name = data.get("name") or os.environ.get("DB_NAME", "contracts")
|
||||||
|
cur.execute("SELECT 1 FROM pg_database WHERE datname = %s", (db_name,))
|
||||||
|
if cur.fetchone():
|
||||||
|
msg = f"DB '{db_name}' already exists"
|
||||||
|
else:
|
||||||
|
cur.execute(db.sql.SQL("CREATE DATABASE {}").format(db.sql.Identifier(db_name)))
|
||||||
|
msg = f"DB '{db_name}' created"
|
||||||
|
cur.close()
|
||||||
|
conn.close()
|
||||||
|
return jsonify({"result": msg})
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({"error": str(e)}), 500
|
||||||
|
|
||||||
if action == "sql":
|
if action == "sql":
|
||||||
sql_text = data.get("sql", "")
|
sql_text = data.get("sql", "")
|
||||||
if not sql_text:
|
if not sql_text:
|
||||||
|
|||||||
Reference in New Issue
Block a user