zking2000 / NotePad

1 stars 0 forks source link

demo #73

Closed zking2000 closed 1 month ago

zking2000 commented 2 months ago
# gateway
# app.py

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

USER_API_URL = 'http://user:5001/user'  # user API的URL

@app.route('/gateway', methods=['GET'])
def gateway():
    username = request.args.get('username')
    if not username:
        return jsonify({'error': 'Username is required'}), 400

    response = requests.get(USER_API_URL, params={'username': username})

    if response.status_code == 200:
        return jsonify(response.json())
    else:
        return jsonify({'error': 'Failed to fetch user data'}), response.status_code

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
# gateway
# Dockerfile

# 使用官方的Python基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制requirements.txt并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY gateway.py .

# 暴露端口
EXPOSE 5000

# 运行应用
CMD ["python", "gateway.py"]
# gateway
# requirements.txt

Flask
requests
# User
# app.py

from flask import Flask, request, jsonify
import psycopg2
from psycopg2.extras import RealDictCursor

app = Flask(__name__)

# 配置Cloud SQL连接
db_config = {
    'user': 'your_db_user',
    'password': 'your_db_password',
    'host': 'your_db_host',
    'port': 'your_db_port',  # 通常是5432
    'database': 'your_db_name'
}

@app.route('/user', methods=['GET'])
def get_user():
    username = request.args.get('username')
    if not username:
        return jsonify({'error': 'Username is required'}), 400

    try:
        conn = psycopg2.connect(**db_config)
        cursor = conn.cursor(cursor_factory=RealDictCursor)

        query = "SELECT * FROM users WHERE username = %s"
        cursor.execute(query, (username,))
        user_data = cursor.fetchone()

        cursor.close()
        conn.close()

        if user_data:
            return jsonify(user_data)
        else:
            return jsonify({'error': 'User not found'}), 404
    except psycopg2.Error as err:
        return jsonify({'error': str(err)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001)
# user
# Dockerfile

# 使用官方的Python基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制requirements.txt并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY user.py .

# 暴露端口
EXPOSE 5001

# 运行应用
CMD ["python", "user.py"]
# User
# requirements.txt

Flask
psycopg2-binary
zking2000 commented 2 months ago
-- 创建 users 表
CREATE TABLE IF NOT EXISTS users (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    birth_date DATE,
    registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    is_active TINYINT(1) DEFAULT 1,
    PRIMARY KEY (id),
    UNIQUE KEY (username),
    UNIQUE KEY (email)
);

-- 插入测试数据
INSERT INTO users (username, email, full_name, birth_date) VALUES
('johndoe', 'john.doe@example.com', 'John Doe', '1990-05-15'),
('janedoe', 'jane.doe@example.com', 'Jane Doe', '1992-08-20'),
('bobsmith', 'bob.smith@example.com', 'Bob Smith', '1985-12-10'),
('alicejones', 'alice.jones@example.com', 'Alice Jones', '1988-03-25'),
('mikebrown', 'mike.brown@example.com', 'Mike Brown', '1995-07-30');

-- 验证数据
SELECT * FROM users;
zking2000 commented 2 months ago
-- 创建 users 表
CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    birth_date DATE,
    registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    is_active TINYINT(1) DEFAULT 1,
    PRIMARY KEY (id)
);

-- 添加唯一索引
ALTER TABLE users ADD UNIQUE INDEX (username);
ALTER TABLE users ADD UNIQUE INDEX (email);

-- 插入测试数据
INSERT INTO users (username, email, full_name, birth_date) VALUES
('johndoe', 'john.doe@example.com', 'John Doe', '1990-05-15');

INSERT INTO users (username, email, full_name, birth_date) VALUES
('janedoe', 'jane.doe@example.com', 'Jane Doe', '1992-08-20');

-- 验证数据
SELECT * FROM users;
zking2000 commented 2 months ago

这个错误是由于 AUTO_INCREMENT 关键字的语法问题引起的。在某些数据库系统中(如 MySQL),AUTO_INCREMENT 是正确的语法,但在其他系统中可能不被识别。

根据错误信息和命令提示符 "otel_db=>",看起来你可能使用的是 PostgreSQL 数据库。在 PostgreSQL 中,正确的自增语法是使用 SERIAL 类型或 GENERATED ALWAYS AS IDENTITY。

要解决这个问题,你可以将 CREATE TABLE 语句修改如下:

```sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    full_name VARCHAR(100) NOT NULL,
    birth_date DATE,
    registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    is_active SMALLINT DEFAULT 1
);

这里的主要更改是:

  1. id INT NOT NULL AUTO_INCREMENT 改为 id SERIAL PRIMARY KEY
  2. 移除了单独的 PRIMARY KEY 声明,因为 SERIAL 类型已经隐含了主键属性。
  3. 将 UNIQUE KEY 约束直接添加到各个字段的定义中。
  4. 将 TINYINT(1) 改为 SMALLINT,因为 PostgreSQL 没有 TINYINT 类型。

如果你确实在使用支持 AUTO_INCREMENT 的数据库系统(如 MySQL),那么问题可能出在语法的其他部分。在这种情况下,请确保没有多余的逗号,并且所有的括号都正确匹配。

无论使用哪种数据库系统,仔细检查语法,确保它符合你所使用的特定数据库的要求,应该就能解决这个问题。​​​​​​​​​​​​​​​​

zking2000 commented 2 months ago
#!/bin/bash

# 设置要测试的用户名
USERNAME="example_user"

# 发送请求到gateway API
RESPONSE=$(curl -s "http://localhost:5000/gateway?username=${USERNAME}")

# 输出返回的结果
echo "Response from gateway API:"
echo "${RESPONSE}"