You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PostgreSQL出现OperationalError?SQLite3可正常运行

问题

在Flask Admin中创建数据表时,SQLite3环境下可正常执行,但切换到PostgreSQL时触发psycopg2.OperationalError和sqlalchemy.exc.OperationalError错误,报错发生在main.py第125行的db.create_all()语句处。

代码如下:

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)

app.config['FLASK_ENV'] = 'development'
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://username:password@localhost/account"
app.config['SECRET_KEY'] = 'asd'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)



@app.route("/", methods = ['POST'])
def mainPage():
    return "hello"



class Accounts(db.Model):
  __tablename__ = "accounts"

  id = db.Column(db.Integer, primary_key=True)
  api_key = db.Column(db.Text(60))
  search_engine_id = db.Column(db.Text(60))



admin = Admin(app, name="ADMIN", template_mode="bootstrap3")
admin.add_view(ModelView(Accounts, db.session, name="Аккаунты"))


if __name__ == "__main__":
  with app.app_context():
    db.create_all()
  app.run(debug=True)

解决步骤

1. 检查PostgreSQL连接参数

  • 确认SQLALCHEMY_DATABASE_URI中的用户名、密码、数据库名称完全正确:
    • 替换username为PostgreSQL的有效用户(默认是postgres)
    • 替换password为对应用户的真实密码
    • 确保account数据库已创建,若未创建,执行以下命令:
      createdb -U username account
      
      或在PostgreSQL命令行中执行:
      CREATE DATABASE account;
      

2. 验证PostgreSQL服务状态

  • 确保PostgreSQL服务正在运行:
    • Ubuntu/Debian系统:sudo systemctl start postgresql
    • Windows系统:在系统服务列表中找到PostgreSQL服务并启动
  • 若修改过默认端口(5432),需要在URI中添加端口号,格式为postgresql://username:password@localhost:<port>/account

3. 确认数据库权限

  • 确保指定的PostgreSQL用户拥有创建表的权限,执行以下SQL语句:
    GRANT ALL PRIVILEGES ON DATABASE account TO username;
    

4. 修正数据类型兼容问题

PostgreSQL的Text类型不需要指定长度,虽然SQLite支持Text(60)写法,但建议统一为兼容写法避免潜在问题:

# 方案1:使用无长度限制的Text
api_key = db.Column(db.Text)
search_engine_id = db.Column(db.Text)

# 方案2:改用String指定长度(更符合PostgreSQL习惯)
api_key = db.Column(db.String(60))
search_engine_id = db.Column(db.String(60))

5. 确保依赖包正确安装

确认psycopg2(PostgreSQL的Python驱动)已正确安装,推荐安装二进制版本:

pip install psycopg2-binary

内容的提问来源于stack exchange,提问作者yosha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:11:10