开发示例
🐍 Python 项目开发
用 Trae 开发 Python 项目,从 Flask API 到数据处理脚本,AI 全程辅助。
环境配置
Terminal — 创建虚拟环境
# 创建项目
mkdir my-python-app && cd my-python-app
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# 在 Trae 中打开(会自动检测虚拟环境)
trae .
示例一:Flask REST API
完整的用户管理 API
Flask + SQLiterequirements.txt
flask==3.0.0
flask-cors==4.0.0
app.py
from flask import Flask, jsonify, request, abort
from flask_cors import CORS
import sqlite3, hashlib, os
app = Flask(__name__)
CORS(app)
DB = 'users.db'
def get_db():
conn = sqlite3.connect(DB)
conn.row_factory = sqlite3.Row
return conn
def init_db():
with get_db() as db:
db.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)''')
@app.route('/api/users', methods=['GET'])
def list_users():
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
search = request.args.get('q', '')
offset = (page - 1) * per_page
with get_db() as db:
query = 'SELECT * FROM users WHERE name LIKE ? OR email LIKE ?'
pattern = f'%{search}%'
users = db.execute(query + ' LIMIT ? OFFSET ?',
[pattern, pattern, per_page, offset]).fetchall()
total = db.execute('SELECT COUNT(*) FROM users WHERE name LIKE ? OR email LIKE ?',
[pattern, pattern]).fetchone()[0]
return jsonify({
'data': [dict(u) for u in users],
'total': total, 'page': page, 'per_page': per_page
})
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json() or {}
name = data.get('name', '').strip()
email = data.get('email', '').strip()
if not name or not email:
abort(400, 'name 和 email 不能为空')
try:
with get_db() as db:
cur = db.execute('INSERT INTO users (name, email) VALUES (?, ?)', [name, email])
user = db.execute('SELECT * FROM users WHERE id = ?', [cur.lastrowid]).fetchone()
return jsonify(dict(user)), 201
except sqlite3.IntegrityError:
abort(409, '邮箱已存在')
@app.errorhandler(400)
@app.errorhandler(404)
@app.errorhandler(409)
def handle_error(e):
return jsonify({'error': e.description}), e.code
if __name__ == '__main__':
init_db()
app.run(debug=True, port=5000)
Terminal — 运行和测试
pip install -r requirements.txt
python app.py
# 测试 API
curl -X POST http://localhost:5000/api/users \
-H "Content-Type: application/json" \
-d '{"name":"张三","email":"zhangsan@example.com"}'
curl http://localhost:5000/api/users?q=张
示例二:数据处理脚本
data_processor.py
import csv, json
from pathlib import Path
from collections import defaultdict
from dataclasses import dataclass, asdict
@dataclass
class SalesRecord:
product: str
amount: float
region: str
month: str
def load_csv(path: str) -> list[SalesRecord]:
records = []
with open(path, encoding='utf-8') as f:
for row in csv.DictReader(f):
records.append(SalesRecord(
product=row['product'],
amount=float(row['amount']),
region=row['region'],
month=row['month']
))
return records
def analyze(records: list[SalesRecord]) -> dict:
by_region = defaultdict(float)
by_product = defaultdict(float)
for r in records:
by_region[r.region] += r.amount
by_product[r.product] += r.amount
return {
'total': sum(r.amount for r in records),
'by_region': dict(sorted(by_region.items(), key=lambda x: -x[1])),
'by_product': dict(sorted(by_product.items(), key=lambda x: -x[1])),
'top_product': max(by_product, key=by_product.get)
}
if __name__ == '__main__':
records = load_csv('sales.csv')
result = analyze(records)
print(json.dumps(result, ensure_ascii=False, indent=2))
在 Trae 中调试 Python 时,选中变量名按 Cmd/Ctrl + L,直接问 AI "这个变量的值是什么意思",比单纯看调试器更高效。