Python中使用Flask和PostgreSQL,在shell下操作正常但Postman请求无法返回数据的问题
小弟写的代码中因为有外键约束的原因,所以没有选择 mysql 而是 postgresql,在服务器的 flask shell 下可以正常的进行增删改查,数据库的连接正常。但是不明白为什么使用 postman 访问接口的时候是返回 Could not get any response。网上很多都是说 ssl 的问题,但是我的接口是有 ssl 证书的,之前用 sqlite 的时候也是可以正常访问接口的,只是出现了问题所以才换 postgresql。 还请了解的兄台解答,小弟先向解答的各位表示感谢。
Python中使用Flask和PostgreSQL,在shell下操作正常但Postman请求无法返回数据的问题
我之后试了一下用 requests 库请求了一下服务器地址,发现被拒绝连接了。
>>> requests.get(‘https://www.danzzzz.xyz/’).status_code
Traceback (most recent call last):
File “/root/Python-3.6.1/www/venv/lib/python3.6/site-packages/urllib3/connection.py”, line 171, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File “/root/Python-3.6.1/www/venv/lib/python3.6/site-packages/urllib3/util/connection.py”, line 79, in create_connection
raise err
File “/root/Python-3.6.1/www/venv/lib/python3.6/site-packages/urllib3/util/connection.py”, line 69, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
我遇到过类似的问题,通常是因为Flask应用在shell环境和HTTP请求环境下的运行方式不同导致的。
最常见的原因是数据库连接没有正确配置或请求上下文问题。让我给你一个完整的解决方案:
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.exc import SQLAlchemyError
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
@app.route('/users', methods=['GET'])
def get_users():
try:
# 确保在请求上下文中操作
users = User.query.all()
result = [{'id': u.id, 'username': u.username, 'email': u.email} for u in users]
return jsonify(result)
except SQLAlchemyError as e:
return jsonify({'error': str(e)}), 500
# 关键点:确保应用上下文正确设置
@app.before_first_request
def create_tables():
db.create_all()
if __name__ == '__main__':
app.run(debug=True)
主要检查以下几点:
-
应用上下文问题:在shell中你可能手动创建了应用上下文,但Postman请求时没有。确保路由函数在正确的上下文中执行。
-
数据库连接配置:检查PostgreSQL连接字符串是否正确,特别是主机名、端口和数据库名。
-
请求超时:PostgreSQL连接可能需要更长时间,增加连接超时设置:
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
'pool_recycle': 300,
'pool_pre_ping': True,
'connect_args': {'connect_timeout': 10}
}
- CORS问题:如果前端和API不同源,需要配置CORS:
from flask_cors import CORS
CORS(app)
- 检查Postman设置:确保请求方法正确(GET/POST等),Content-Type设置为application/json。
在shell中测试时使用:
with app.app_context():
users = User.query.all()
print(users)
这样能模拟HTTP请求的上下文环境。
建议先用最简单的路由测试连接是否正常。
这还需要用 requests 试?
难道第一反应不是用浏览器试吗?
postman…只支持 http 吧…
postgresql 没有 http 的接口吧…
sorry 我孤陋寡闻了 Orz
没日志的化很难回答,网络问题千奇百怪
curl --insecure https://domain 试试看
接口测试工具客户端,我一般用 Advanced REST client,很好用

