如何连接数据库?

问题描述 投票:0回答:1

我正在做博客的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 的文档

python database postgresql flask flask-sqlalchemy
1个回答
0
投票

'postgresql://:123@localhost/blog'
作为数据库 URI 是可疑的。这意味着没有用户名和密码“123”。格式是
postgresql://username:password@server/db

© www.soinside.com 2019 - 2024. All rights reserved.