Fix SQLAlchemy 2.x compatibility: wrap raw SQL in text()
SQLAlchemy 2.x requires raw SQL strings to be explicitly wrapped in text(). Fixed 16 instances across 5 route files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ from typing import Optional
|
||||
import httpx
|
||||
from fastapi import APIRouter, File, Form, Header, UploadFile, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import text
|
||||
|
||||
from database import SessionLocal
|
||||
|
||||
@@ -291,11 +292,11 @@ async def analyze_document(
|
||||
db = SessionLocal()
|
||||
try:
|
||||
db.execute(
|
||||
"""INSERT INTO compliance_imported_documents
|
||||
text("""INSERT INTO compliance_imported_documents
|
||||
(id, tenant_id, filename, file_type, file_size, detected_type, detection_confidence,
|
||||
extracted_text, extracted_entities, recommendations, status, analyzed_at)
|
||||
VALUES (:id, :tenant_id, :filename, :file_type, :file_size, :detected_type, :confidence,
|
||||
:text, :entities::jsonb, :recommendations::jsonb, 'analyzed', NOW())""",
|
||||
:text, :entities::jsonb, :recommendations::jsonb, 'analyzed', NOW())"""),
|
||||
{
|
||||
"id": doc_id,
|
||||
"tenant_id": tenant_id,
|
||||
@@ -313,9 +314,9 @@ async def analyze_document(
|
||||
if total_gaps > 0:
|
||||
import json
|
||||
db.execute(
|
||||
"""INSERT INTO compliance_gap_analyses
|
||||
text("""INSERT INTO compliance_gap_analyses
|
||||
(tenant_id, document_id, total_gaps, critical_gaps, high_gaps, medium_gaps, low_gaps, gaps, recommended_packages)
|
||||
VALUES (:tenant_id, :document_id, :total, :critical, :high, :medium, :low, :gaps::jsonb, :packages::jsonb)""",
|
||||
VALUES (:tenant_id, :document_id, :total, :critical, :high, :medium, :low, :gaps::jsonb, :packages::jsonb)"""),
|
||||
{
|
||||
"tenant_id": tenant_id,
|
||||
"document_id": doc_id,
|
||||
@@ -358,7 +359,7 @@ async def get_gap_analysis(
|
||||
db = SessionLocal()
|
||||
try:
|
||||
result = db.execute(
|
||||
"SELECT * FROM compliance_gap_analyses WHERE document_id = :doc_id AND tenant_id = :tid",
|
||||
text("SELECT * FROM compliance_gap_analyses WHERE document_id = :doc_id AND tenant_id = :tid"),
|
||||
{"doc_id": document_id, "tid": tid},
|
||||
).fetchone()
|
||||
if not result:
|
||||
@@ -374,11 +375,11 @@ async def list_documents(tenant_id: str = "default"):
|
||||
db = SessionLocal()
|
||||
try:
|
||||
result = db.execute(
|
||||
"""SELECT id, filename, file_type, file_size, detected_type, detection_confidence,
|
||||
text("""SELECT id, filename, file_type, file_size, detected_type, detection_confidence,
|
||||
extracted_entities, recommendations, status, analyzed_at, created_at
|
||||
FROM compliance_imported_documents
|
||||
WHERE tenant_id = :tenant_id
|
||||
ORDER BY created_at DESC""",
|
||||
ORDER BY created_at DESC"""),
|
||||
{"tenant_id": tenant_id},
|
||||
)
|
||||
rows = result.fetchall()
|
||||
@@ -424,11 +425,11 @@ async def delete_document(
|
||||
try:
|
||||
# Delete gap analysis first (FK dependency)
|
||||
db.execute(
|
||||
"DELETE FROM compliance_gap_analyses WHERE document_id = :doc_id AND tenant_id = :tid",
|
||||
text("DELETE FROM compliance_gap_analyses WHERE document_id = :doc_id AND tenant_id = :tid"),
|
||||
{"doc_id": document_id, "tid": tid},
|
||||
)
|
||||
result = db.execute(
|
||||
"DELETE FROM compliance_imported_documents WHERE id = :doc_id AND tenant_id = :tid",
|
||||
text("DELETE FROM compliance_imported_documents WHERE id = :doc_id AND tenant_id = :tid"),
|
||||
{"doc_id": document_id, "tid": tid},
|
||||
)
|
||||
db.commit()
|
||||
|
||||
Reference in New Issue
Block a user