flask_sqlalchemy对接Oracle19c时Order表生成小写带双引号问题求助
问题根源
order是Oracle数据库的保留关键字,SQLAlchemy检测到标识符为数据库保留字时,会自动添加双引号包裹以规避语法冲突,这是该表需要带双引号才能访问的核心原因,和大小写敏感性配置无关。
解决方法
优先推荐修改表名避免和保留字冲突,修改步骤如下:
- 给Order模型显式指定非保留字的表名,参考代码:
class Order(db.Model): __tablename__ = 'orders' # 可替换为order_info等其他非关键字名称 # 原有字段定义保持不变 id = db.Column(db.Integer, primary_key=True) order_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) # ...剩余字段代码不变
- 同步修改所有关联该表的外键配置:
调整中间表order_product的外键关联,和新表名对应:order_product = db.Table('order_product', db.Column('order_id', db.Integer, db.ForeignKey('orders.id'), primary_key=True), db.Column('product_id', db.Integer, db.ForeignKey('product.id'), primary_key=True) ) - 删除数据库中已生成的
"order"表,重新执行表创建操作即可。新生成的表不会被自动加双引号,可直接通过select * from orders正常访问。
你现有配置中的case_sensitive=False已经符合要求,无需额外调整连接字符串相关配置。
内容的提问来源于stack exchange,提问作者Gustavo Leig
相关产品推荐
相关产品推荐

