我正在做博客的REST API实现 这是我的主要应用程序的代码
from flask import Flask, jsonify
from flask_jwt import JWT
import hmac
from datetime import timedelta
from flask_sqlalchemy import SQLAlchemy
from resources.author import author_api
from resources.category import category_api
from resources.post import post_api
from models.author import Author
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://:123@localhost/blog'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JWT_SECRET_KEY'] = 'super-secret'
app.config['JWT_EXPIRATION_DELTA'] = timedelta(hours=1)
db = SQLAlchemy()
with app.app_context():
db.init_app(app)
db.create_all()
def authenticate(username, password):
author = Author.query.filter_by(login=username).first()
if author and hmac.compare_digest(author.password.encode('utf-8'), password.encode('utf-8')):
return author
def identity(payload):
author_id = payload['identity']
return Author.query.filter_by(id=author_id).first()
jwt = JWT(app, authenticate, identity)
@app.route('/')
def index():
return jsonify({'message': 'Welcome to the blog API!'})
app.register_blueprint(author_api, url_prefix='/api')
app.register_blueprint(category_api, url_prefix='/api')
app.register_blueprint(post_api, url_prefix='/api')
if __name__ == '__main__':
app.run(debug=True)
但是我有一个错误。在研究它之后,它似乎与数据库连接有问题。不知道如何解决它。服务器正在运行并且所有连接数据都是正确的。 这是一个错误。
Traceback (most recent call last):
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 145, in __init__
self._dbapi_connection = engine.raw_connection()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3269, in raw_connection
return self.pool.connect()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 455, in connect
return _ConnectionFairy._checkout(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 1270, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 719, in checkout
rec = pool._do_get()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 168, in _do_get
with util.safe_reraise():
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
raise exc_value.with_traceback(exc_tb)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 166, in _do_get
return self._create_connection()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 396, in _create_connection
return _ConnectionRecord(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 681, in __init__
self.__connect()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 905, in __connect
with util.safe_reraise():
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
raise exc_value.with_traceback(exc_tb)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 901, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\create.py", line 640, in connect
return dialect.connect(*cargs, **cparams)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\default.py", line 580, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\psycopg2\__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\projects\projects for fun\blog\app.py", line 22, in <module>
db.create_all()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\flask_sqlalchemy\extension.py", line 884, in create_all
self._call_for_binds(bind_key, "create_all")
File "D:\projects\projects for fun\blog\venv\lib\site-packages\flask_sqlalchemy\extension.py", line 865, in _call_for_binds
getattr(metadata, op_name)(bind=engine)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 5576, in create_all
bind._run_ddl_visitor(
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3219, in _run_ddl_visitor
with self.begin() as conn:
File "C:\Users\andre\AppData\Local\Programs\Python\Python310\lib\contextlib.py", line 135, in __enter__
return next(self.gen)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3209, in begin
with self.connect() as conn:
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3245, in connect
return self._connection_cls(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 147, in __init__
Connection._handle_dbapi_exception_noconnection(
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 2410, in _handle_dbapi_exception_noconnection
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 145, in __init__
self._dbapi_connection = engine.raw_connection()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3269, in raw_connection
return self.pool.connect()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 455, in connect
return _ConnectionFairy._checkout(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 1270, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 719, in checkout
rec = pool._do_get()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 168, in _do_get
with util.safe_reraise():
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
raise exc_value.with_traceback(exc_tb)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 166, in _do_get
return self._create_connection()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 396, in _create_connection
return _ConnectionRecord(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 681, in __init__
self.__connect()
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 905, in __connect
with util.safe_reraise():
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
raise exc_value.with_traceback(exc_tb)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\pool\base.py", line 901, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\create.py", line 640, in connect
return dialect.connect(*cargs, **cparams)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\sqlalchemy\engine\default.py", line 580, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "D:\projects\projects for fun\blog\venv\lib\site-packages\psycopg2\__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Process finished with exit code 1
我已经尝试使用 chatgpt 调试它并阅读了 sqlachemy 和 postgresql 的文档
'postgresql://:123@localhost/blog'
作为数据库 URI 是可疑的。这意味着没有用户名和密码“123”。格式是postgresql://username:password@server/db