ollama - sqlcoder模型:面向提示詞編程(根據用戶信息生成sql語句并執行返回結果)

https://ollama.ac.cn/library/sqlcoder

https://blog.csdn.net/hzether/article/details/143816042

import ollama
import sqlite3
import json
from contextlib import closingdef generate_and_execute_sql(question: str, db_path: str) -> dict:# 1. 生成 SQL 查詢語句prompt =  f"""### Instructions:Convert Chinese question to SQL query. Follow these rules strictly:1. ONLY return a valid SELECT SQL query2. Use EXACT table names from the mapping below3. DO NOT use any table that's not in the mapping### Examples:Question: 所有訂單記錄SQL: SELECT * FROM orders ORDER BY id;### Database Schema:{get_schema(db_path)}### Question:{question}### SQL Query:"""print(f"輸入: {prompt}")response = ollama.chat(model='sqlcoder:latest',messages=[{'role': 'user', 'content': prompt}])sql_query = response['message']['content'].strip()print(f"生成的SQL: {sql_query}")  # 調試日志# 2. 執行 SQL 查詢try:with closing(sqlite3.connect(db_path)) as conn:conn.row_factory = sqlite3.Row  # 設置為行工廠cursor = conn.cursor()cursor.execute(sql_query)# 3. 獲取結果并轉為 JSONrows = cursor.fetchall()result = [dict(row) for row in rows]return {"status": "success","sql": sql_query,"data": result}except Exception as e:return {"status": "error","sql": sql_query,"message": str(e)}def get_schema(db_path: str) -> str:"""獲取數據庫的 schema 信息"""with closing(sqlite3.connect(db_path)) as conn:cursor = conn.cursor()cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")tables = cursor.fetchall()schema_info = []for table in tables:table_name = table[0]cursor.execute(f"PRAGMA table_info({table_name});")columns = cursor.fetchall()col_details = [f"{col[1]} ({col[2]})" for col in columns]schema_info.append(f"表 {table_name}: {', '.join(col_details)}")return "\n".join(schema_info)# 使用示例
if __name__ == "__main__":# 配置參數DB_PATH = "data.db"  # SQLite 數據庫文件路徑QUESTION = "查詢銷售額超過10000的訂單信息"  # 用戶問題# 執行查詢result = generate_and_execute_sql(QUESTION, DB_PATH)print(f"返回數據")print(json.dumps(result, indent=2, ensure_ascii=False))
D:\ProgramData\anaconda3\python.exe F:/mark/sqlauto/main.py
輸入: ### Instructions:Convert Chinese question to SQL query. Follow these rules strictly:1. ONLY return a valid SELECT SQL query2. Use EXACT table names from the mapping below3. DO NOT use any table that's not in the mapping### Examples:Question: 所有訂單記錄SQL: SELECT * FROM orders ORDER BY id;### Database Schema:表 sqlite_sequence: name (), seq ()
表 orders: order_id (INTEGER), customer_name (TEXT), order_date (DATE), total_amount (REAL), status (TEXT)### Question:查詢銷售額超過10000的訂單信息### SQL Query:生成的SQL: SELECT * FROM orders WHERE CAST(total_amount AS integer) > 10000;
返回數據
{"status": "success","sql": "SELECT * FROM orders WHERE CAST(total_amount AS integer) > 10000;","data": [{"order_id": 2,"customer_name": "李四","order_date": "2023-09-20","total_amount": 12000.5,"status": "shipped"},{"order_id": 4,"customer_name": "趙六","order_date": "2023-10-18","total_amount": 21000.0,"status": "delivered"},{"order_id": 6,"customer_name": "孫八","order_date": "2023-11-15","total_amount": 15500.0,"status": "delivered"},{"order_id": 8,"customer_name": "吳十","order_date": "2023-12-10","total_amount": 18900.75,"status": "delivered"}]
}Process finished with exit code 0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88683.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言,結構體指針案例

案例一&#xff1a; #include <stdio.h> #include <stdbool.h> #include <string.h> // 添加string.h頭文件用于strcpy //結構體指針//方式 1 : 先定義結構體 struct Dog {char *name;int age;char weight; };//方式 1 : char *get_dog_info(struct Dog do…

Vue 3 中父子組件雙向綁定的 4 種方式

&#x1f501; Vue 3 中父子組件雙向綁定的 4 種方式 整理不易&#xff0c;點贊 收藏 關注&#xff0c;助你組件通信不再混亂&#xff01;? 場景說明 父組件希望將某個值傳遞給子組件&#xff0c;同時希望子組件能夠修改這個值&#xff08;實現“綁定 反向更新”&#xff0…

阻有形,容無聲——STA 簽核之RC Corner

RC corner&#xff0c;RC指的是gate跟network的寄生參數&#xff0c;寄生參數抽取工具&#xff08;比如Starrc&#xff09;根據電路的物理信息&#xff0c;抽取出電路的電阻電容值&#xff0c;再以寄生參數文件&#xff08;Spef&#xff09;輸入給STA工具&#xff08;PT&#x…

多代理系統(multi-agent)框架深度解析:架構、特性與未來

在人工智能技術迭代的浪潮中&#xff0c;多代理系統&#xff08;Multi-Agent System&#xff09;正從實驗室走向產業應用的核心舞臺。這一技術范式的崛起源于三大驅動力&#xff1a;大模型能力的指數級提升、復雜任務分解的需求爆發&#xff0c;以及傳統單體智能架構的局限性日…

【Redis】黑馬點評筆記:使用redis解決各種分布式/并發問題

1、系統架構2、基于session登錄用戶的 session 是由服務器&#xff08;如 Tomcat&#xff09;自動管理和維護的&#xff0c;每個用戶在訪問 Web 應用時都會擁有一個獨立的 session 對象。這個對象是通過瀏覽器和服務器之間的 HTTP 協議自動綁定的。1. 如何區分不同用戶的 Sessi…

Javaweb- 11 MVC架構模式

MVC&#xff08;Model View Controller&#xff09; 是軟件工程中一種軟件架構模式&#xff0c;它把軟件系統分為模型&#xff0c;視圖&#xff0c;控制器&#xff0c;三個基本部分。用一種業務邏輯&#xff0c;數據&#xff0c;界面顯示分離的方法組織代碼&#xff0c;將業務邏…

【電腦】主板的基礎知識

主板&#xff08;Motherboard&#xff09;是計算機的核心組件之一&#xff0c;它將所有其他硬件部件連接在一起并協調它們的工作。以下是關于主板的詳細知識&#xff1a;1. 架構組成一個典型的主板通常由以下幾個主要部分構成&#xff1a;芯片組&#xff08;Chipset&#xff09…

【飛算JavaAI】一站式智能開發,驅動Java開發全流程革新

【作者主頁】Francek Chen 【專欄介紹】???人工智能與大模型應用??? 人工智能&#xff08;AI&#xff09;通過算法模擬人類智能&#xff0c;利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡&#xff08;如ChatGPT&#xff09…

STM32中的RTC(實時時鐘)詳解

前言&#xff1a;為什么需要RTC&#xff1f; 在嵌入式系統中&#xff0c;時間記錄是一項基礎且關鍵的功能。想象一下&#xff1a;智能家居設備需要按時間觸發開關燈&#xff0c;工業儀表需要記錄傳感器數據的采集時刻&#xff0c;物聯網終端需要同步服務器時間戳……這些場景都…

Python技巧記錄

空格拼接數組格式化顯示 一維數組 arr [1, 2, 3, 4, 5] print( .join(map(str, arr))) # 直接轉換并連接二維數組 for row in arr:print( .join(map(str, row)))for row in arr: 此循環會遍歷矩陣arr中的每一行。這里的arr是一個二維列表&#xff0c;每一行代表一個子列表。m…

next.js打包后的前端資源如何進行部署和訪問,為什么沒有index.html

在 Next.js 項目中&#xff0c;打包后的部署方式和傳統單頁應用&#xff08;SPA&#xff09;有所不同&#xff0c;尤其是沒有直接生成 index.html 這一點。以下是詳細解釋和部署指南&#xff1a;為什么沒有 index.html 文件&#xff1f; Next.js 采用 混合渲染策略&#xff0c;…

Qt+FFmpeg網絡視頻流播放

init 函數用于初始化 FFmpeg&#xff0c;包括設置參數、打開輸入、初始化視頻和音頻等。initOption 函數用于設置 FFmpeg 的參數選項。bool FFmpegThread::init() {if (url.isEmpty()) {return false;}//判斷該攝像機是否能聯通if (checkConn && isRtsp) {if (!checkUr…

【SpringBoot】Spring Boot 高并發優化終極指南,涵蓋線程模型、JVM 調優、數據庫訪問、緩存策略等 15+ 核心模塊

Spring Boot 高并發優化終極指南&#xff0c;涵蓋線程模型、JVM 調優、數據庫訪問、緩存策略等 15 核心模塊一、線程模型深度調優&#xff08;核心瓶頸突破&#xff09;1. Tomcat 線程池原子級配置2. 異步任務線程池隔離策略二、JVM 層終極調參&#xff08;G1GC 深度優化&#…

linux(CentOS-7-x86_64:NAT模式下解決yum無法使用:更新yum源的詳細操作步驟2025)

目錄 一、CentOS-7-x86_64的NAT模式下解決yum無法使用。&#xff08;更新可用的yum&#xff09; &#xff08;1&#xff09;首先保證能夠ping通&#xff0c;也就是NAT模式下虛擬機有網絡。 &#xff08;2&#xff09;錯誤&#xff1a;無法使用yum。比如我現在無法yum search if…

C++11的整理筆記

Lambda 表達式Lambda 表達式是 C11 引入的一種強大的功能&#xff0c;它允許你在代碼中直接定義匿名函數對象。Lambda 表達式可以捕獲上下文中的變量&#xff0c;并在需要時使用它們。它們通常用于簡化代碼&#xff0c;尤其是那些需要傳遞函數對象作為參數的場景&#xff08;如…

MS1826+MS9332 4K@30Hz HD4×2視頻分割器

MS1826MS9332是一款支持4K30Hz分辨率的HD42視頻分割器方案。支持四路HD輸入兩路HD輸出&#xff0c;最高支持4K30Hz分辨率。該方案具有Scaler、OSD、畫面分割、無縫切換、淡入淡出及旋轉等功能。該方案現已實現量產&#xff0c;并提供完善的技術支持&#xff0c;適用于各類高清視…

用 MATLAB 模擬傳染病傳播:從 SI 模型到 SIS 模型的可視化之旅

在公共衛生研究中&#xff0c;數學模型是理解傳染病傳播規律的重要工具。通過數值模擬&#xff0c;我們能直觀看到 “易感人群” 和 “感染人群” 隨時間的變化趨勢&#xff0c;甚至能預測疫情發展的關鍵節點。今天就帶大家用 MATLAB 實現兩個經典的傳染病模型 ——SI 模型和SI…

Ruby如何采集直播數據源地址

在當今數字化的時代&#xff0c;實時獲取并處理信息變得尤為重要。特別是在體育賽事、新聞報道等領域&#xff0c;及時獲取最新的直播數據源對于提升用戶體驗至關重要。本文將介紹如何使用Ruby語言來采集特定網站的數據源地址 一、準備工作 首先&#xff0c;確保你的環境中已…

【fitz+PIL】PDF圖片文字顏色加深

文章目錄0 引言1 解決思路及流程1.1 思路1.2 代碼實現2 完整代碼與效果3 總結0 引言 沒錯&#xff0c;這是連續劇。女友對上一篇【fitzOpenCV】去除PDF圖片中的水印得到的去水印效果很滿意&#xff0c;于是問我可不可以再幫她處理一下另一個PDF文件&#xff0c;我二話不說答應…

tp8.0\jwt接口安全驗證

環境&#xff1a;php8.3\tp8.1\firebase-jwt6.1app\middleware\JwtAuth<?php namespace app\middleware;use app\common\library\JwtHandler; use think\Request; use think\facade\Env;class JwtAuth {public function handle(Request $request, \Closure $next){// 獲取當…