使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理
使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理
为完成此次数据库连接实验,笔者用自己的笔记本电脑搭建了一台linux虚机,安装了oracle 23C,并借助deepseek创建了若干与电商业务有关的表并插入了一些记录。
接着在windows实体机端(作为oracle的客户端)配通了sqlplus连接,然后开始用jupyter调试python调用langchain连接远程oracle的不同方法。
要通过LangChain的SQLDatabase
连接远程Oracle数据库,需要按照以下步骤操作:
1. 安装必要的依赖
首先确保你已安装必要的Python包:
pip install langchain cx_Oracle sqlalchemy
注意:cx_Oracle
是Oracle官方提供的Python驱动,需要Oracle客户端库支持。
安装时报错,错误表明在安装 cx_Oracle
时遇到了问题,主要是因为缺少 Microsoft Visual C++ 编译工具。
错误信息明确指出需要 Microsoft Visual C++ 14.0 或更高版本,这是编译 cx_Oracle
所必需的。
下载并安装 Microsoft Visual C++ Build Toolshttps://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
选择以下组件:
-
核心组件:
“C++ build tools”(C++生成工具)
“MSVC v142 - VS 2019 C++ x64/x86 build tools”(或最新版本如MSVC v143 - VS 2022)
“Windows 10 SDK"或"Windows 11 SDK”(根据你的操作系统版本选择) -
推荐附加组件:
“C++ CMake tools for Windows”(CMake工具)
完成安装后,再执行 pip install langchain cx_Oracle sqlalchemy,成功
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: langchain in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (0.3.24)
Collecting cx_OracleUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/e8/16/13c265afc984796fe38ee928733569b599cfd657245ddd1afad238b66656/cx_Oracle-8.3.0.tar.gz (363 kB)Installing build dependencies: startedInstalling build dependencies: finished with status 'done'Getting requirements to build wheel: startedGetting requirements to build wheel: finished with status 'done'Preparing metadata (pyproject.toml): startedPreparing metadata (pyproject.toml): finished with status 'done'
Requirement already satisfied: sqlalchemy in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (2.0.40)
Requirement already satisfied: langchain-core<1.0.0,>=0.3.55 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (0.3.55)
Requirement already satisfied: langchain-text-splitters<1.0.0,>=0.3.8 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (0.3.8)
Requirement already satisfied: langsmith<0.4,>=0.1.17 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (0.3.32)
Requirement already satisfied: pydantic<3.0.0,>=2.7.4 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (2.11.2)
Requirement already satisfied: requests<3,>=2 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (2.32.3)
Requirement already satisfied: PyYAML>=5.3 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain) (6.0.2)
Requirement already satisfied: greenlet>=1 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from sqlalchemy) (3.1.1)
Requirement already satisfied: typing-extensions>=4.6.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from sqlalchemy) (4.13.1)
Requirement already satisfied: tenacity!=8.4.0,<10.0.0,>=8.1.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain-core<1.0.0,>=0.3.55->langchain) (9.1.2)
Requirement already satisfied: jsonpatch<2.0,>=1.33 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain-core<1.0.0,>=0.3.55->langchain) (1.33)
Requirement already satisfied: packaging<25,>=23.2 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langchain-core<1.0.0,>=0.3.55->langchain) (24.2)
Requirement already satisfied: httpx<1,>=0.23.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langsmith<0.4,>=0.1.17->langchain) (0.28.1)
Requirement already satisfied: orjson<4.0.0,>=3.9.14 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langsmith<0.4,>=0.1.17->langchain) (3.10.16)
Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langsmith<0.4,>=0.1.17->langchain) (1.0.0)
Requirement already satisfied: zstandard<0.24.0,>=0.23.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from langsmith<0.4,>=0.1.17->langchain) (0.23.0)
Requirement already satisfied: annotated-types>=0.6.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.7.0)
Requirement already satisfied: pydantic-core==2.33.1 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (2.33.1)
Requirement already satisfied: typing-inspection>=0.4.0 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.4.0)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2->langchain) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2->langchain) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2->langchain) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2->langchain) (2025.1.31)
Requirement already satisfied: anyio in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from httpx<1,>=0.23.0->langsmith<0.4,>=0.1.17->langchain) (4.9.0)
Requirement already satisfied: httpcore==1.* in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from httpx<1,>=0.23.0->langsmith<0.4,>=0.1.17->langchain) (1.0.7)
Requirement already satisfied: h11<0.15,>=0.13 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from httpcore==1.*->httpx<1,>=0.23.0->langsmith<0.4,>=0.1.17->langchain) (0.14.0)
Requirement already satisfied: jsonpointer>=1.9 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from jsonpatch<2.0,>=1.33->langchain-core<1.0.0,>=0.3.55->langchain) (3.0.0)
Requirement already satisfied: sniffio>=1.1 in c:\users\administrator\appdata\local\programs\python\python312\lib\site-packages (from anyio->httpx<1,>=0.23.0->langsmith<0.4,>=0.1.17->langchain) (1.3.1)
Building wheels for collected packages: cx_OracleBuilding wheel for cx_Oracle (pyproject.toml): startedBuilding wheel for cx_Oracle (pyproject.toml): finished with status 'done'Created wheel for cx_Oracle: filename=cx_oracle-8.3.0-cp312-cp312-win_amd64.whl size=224067 sha256=5e15eb2bf6bf1fcc93e7638f63c7625c2e34c010983d374769e8ebc8948e7516Stored in directory: c:\users\administrator\appdata\local\pip\cache\wheels\b2\c1\f2\8eb1495ea05272640061605216448697e673ecba3b1ff54bb0
Successfully built cx_Oracle
Installing collected packages: cx_Oracle
Successfully installed cx_Oracle-8.3.0
2. 准备连接字符串
连接字符串变体示例
场景 | 连接字符串格式 |
---|---|
标准服务名 | oracle+cx_oracle://user:pass@host/service_name |
指定端口 | oracle+cx_oracle://user:pass@host:1521/service_name |
使用SID | oracle+cx_oracle://user:pass@host:1521:ORCL |
TNS别名 | oracle+cx_oracle://user:pass@tns_alias |
云数据库 | oracle+cx_oracle://user:pass@host:1521/ORCL?wallet_location=/path/to/wallet |
3. 创建SQLDatabase连接 (三种方法)
方法1:创建cx_Oracle连接
from langchain_community.utilities import SQLDatabase
from sqlalchemy import create_engine#目前采用可以调通的方法如下:
#1.创建cx_Oracle连接
import cx_Oracle
dsn = cx_Oracle.makedsn('192.168.43.11', 1521, service_name='FREEPDB1') # 替换实际主机名
conn = cx_Oracle.connect(user="dbtest", password="test", dsn=dsn)# print(conn.version) # 输出版本号表示成功
# conn.close()#2.转换为SQLDatabase实例
db = SQLDatabase.from_uri(f"oracle+cx_oracle://", engine_args={"creator": lambda: conn})#3. 执行测试查询
result = db.run("SELECT * FROM products")
print(result)
方法2:用create_engine
from langchain_community.utilities import SQLDatabase
from sqlalchemy import create_engine
# 和执行端的tnsnames.ora里的配置信息一致
#(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = centos8)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = FREEPDB1) ) )
#注意必须明确定义“?service_name={service_name}”,否则总是报
# DatabaseError: (cx_Oracle.DatabaseError) ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID
db_user = "dbtest"
db_password = "??????"
db_host = "192.168.43.11:1521"
service_name = "FREEPDB1"
# 1.连接字符串
#oracle_connection_string = "oracle+cx_oracle://dbtest:test@192.168.43.11:1521/?service_name=FREEPDB1"
oracle_connection_string = f"oracle+cx_oracle://{db_user}:{db_password}@{db_host}/?service_name={service_name}"
# 创建SQLAlchemy引擎
engine = create_engine(oracle_connection_string)# 2.创建SQLDatabase实例
db = SQLDatabase(engine)# 3. 执行测试查询
result = db.run("SELECT * FROM products")
print(result)
方法3:直接使用SQLDatabase.from_uri,
# 和执行端的tnsnames.ora里的配置信息一致
#(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = centos8)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = FREEPDB1) ) )
#注意必须明确定义“?service_name={service_name}”,否则总是报
# DatabaseError: (cx_Oracle.DatabaseError) ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID
from langchain_community.utilities import SQLDatabase
db_user = "dbtest"
db_password = "?????"
db_host = "192.168.43.11:1521"
service_name = "FREEPDB1"db = SQLDatabase.from_uri(f"oracle+cx_oracle://{db_user}:{db_password}@{db_host}/?service_name={service_name}")# 执行测试查询
result = db.run("SELECT * FROM products")
print(result)
调用agent_excutor 测试LLM大模型提供的 SQL 助理能力
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.llms.openai import OpenAI
from langchain.agents import AgentExecutor
from langchain.chat_models import ChatOpenAI
import osllm = ChatOpenAI(temperature=0.01,model="deepseek-chat", openai_api_key = os.getenv('API_KEY'),openai_api_base="https://api.deepseek.com"
)# 需要设置llm
toolkit = SQLDatabaseToolkit(db=db, llm=llm)agent_executor = create_sql_agent(llm=llm,toolkit=toolkit,verbose=True
)
# Task: 描述数据表
agent_executor.invoke("描述与订单相关的表及其关系")
输出如下:
> Entering new SQL Agent Executor chain...
Action: sql_db_list_tables
Action Input: order_items, orders, payment_info, product_categories, product_images, product_reviews, products, shopping_cart, user_addresses, usersI see several tables that might be related to orders. The most relevant ones appear to be "orders", "order_items", and possibly "payment_info" and "users". I should examine their schemas to understand their relationships.Action: sql_db_schema
Action Input: orders, order_items, payment_info, users
CREATE TABLE order_items (item_id NUMBER NOT NULL, order_id NUMBER NOT NULL, product_id NUMBER NOT NULL, product_name VARCHAR(100 CHAR) NOT NULL, product_image VARCHAR(200 CHAR), price NUMBER(10, 2) NOT NULL, quantity NUMBER NOT NULL, total_price NUMBER(10, 2) NOT NULL, CONSTRAINT sys_c008467 PRIMARY KEY (item_id), CONSTRAINT sys_c008468 FOREIGN KEY(order_id) REFERENCES orders (order_id), CONSTRAINT sys_c008469 FOREIGN KEY(product_id) REFERENCES products (product_id)
)TABLESPACE "TESTDBSPACE"/*
3 rows from order_items table:
item_id order_id product_id product_name product_image price quantity total_price
1.0 1001.0 10001.0 智能手机X http://example.com/images/10001_1.jpg 5999 1.0 5999
2.0 1001.0 10010.0 男士T恤 http://example.com/images/10010_1.jpg 99 2.0 198
3.0 1002.0 10004.0 轻薄笔记本 http://example.com/images/10004_1.jpg 8999 1.0 8999
*/CREATE TABLE orders (order_id NUMBER NOT NULL, order_no VARCHAR(50 CHAR) NOT NULL, user_id NUMBER NOT NULL, address_id NUMBER NOT NULL, total_amount NUMBER(10, 2) NOT NULL, payment_amount NUMBER(10, 2) NOT NULL, freight_amount NUMBER(10, 2) DEFAULT 0, order_status NUMBER(1, 0) DEFAULT 0, payment_time DATE, delivery_time DATE, receive_time DATE, create_time DATE DEFAULT SYSDATE, CONSTRAINT sys_c008457 PRIMARY KEY (order_id), CONSTRAINT sys_c008459 FOREIGN KEY(user_id) REFERENCES users (user_id), CONSTRAINT sys_c008460 FOREIGN KEY(address_id) REFERENCES user_addresses (address_id)
)TABLESPACE "TESTDBSPACE"/*
3 rows from orders table:
order_id order_no user_id address_id total_amount payment_amount freight_amount order_status payment_time delivery_time receive_time create_time
1001.0 ORD20221101001 1.0 101.0 6197 6197 0 4 2022-11-01 10:30:00 2022-11-02 09:15:00 2022-11-03 14:20:00 2022-11-01 10:00:00
1002.0 ORD20221102001 2.0 201.0 9118 9118 0 4 2022-11-02 11:20:00 2022-11-03 10:30:00 2022-11-04 16:45:00 2022-11-02 11:00:00
1003.0 ORD20221103001 3.0 301.0 1598 1598 0 4 2022-11-03 14:45:00 2022-11-04 13:20:00 2022-11-05 10:30:00 2022-11-03 14:30:00
*/CREATE TABLE payment_info (payment_id NUMBER NOT NULL, order_id NUMBER NOT NULL, payment_type NUMBER(1, 0) NOT NULL, trade_no VARCHAR(100 CHAR), payment_amount NUMBER(10, 2) NOT NULL, payment_status NUMBER(1, 0) DEFAULT 0, create_time DATE DEFAULT SYSDATE, callback_time DATE, CONSTRAINT sys_c008473 PRIMARY KEY (payment_id), CONSTRAINT sys_c008474 FOREIGN KEY(order_id) REFERENCES orders (order_id)
)TABLESPACE "TESTDBSPACE"/*
3 rows from payment_info table:
payment_id order_id payment_type trade_no payment_amount payment_status create_time callback_time
1.0 1001.0 1 PAY202211010001 6197 1 2022-11-01 10:30:00 2022-11-01 10:31:00
2.0 1002.0 2 PAY202211020001 9118 1 2022-11-02 11:20:00 2022-11-02 11:21:00
3.0 1003.0 1 PAY202211030001 1598 1 2022-11-03 14:45:00 2022-11-03 14:46:00
*/CREATE TABLE users (user_id NUMBER NOT NULL, username VARCHAR(50 CHAR) NOT NULL, password VARCHAR(100 CHAR) NOT NULL, email VARCHAR(100 CHAR) NOT NULL, phone VARCHAR(20 CHAR), register_date DATE DEFAULT SYSDATE, status NUMBER(1, 0) DEFAULT 1
, CONSTRAINT sys_c008421 PRIMARY KEY (user_id)
)TABLESPACE "TESTDBSPACE"/*
3 rows from users table:
user_id username password email phone register_date status
1.0 张三 zhangsan123 zhangsan@example.com 13800138001 2022-01-01 00:00:00 1
2.0 李四 lisi456 lisi@example.com 13900139002 2022-01-05 00:00:00 1
3.0 王五 wangwu789 wangwu@example.com 13700137003 2022-01-10 00:00:00 1
*/I now understand the tables related to orders and their relationships. Here's the description:1. **orders** table: - Contains core order information (order_id, order_no, user_id, address_id, amounts, statuses, timestamps)- Relates to:- users table via user_id (foreign key)- user_addresses table via address_id (foreign key, though we didn't see its schema)2. **order_items** table:- Contains individual items within each order (product details, quantities, prices)- Relates to:- orders table via order_id (foreign key)- products table via product_id (foreign key)3. **payment_info** table:- Contains payment details for orders- Relates to:- orders table via order_id (foreign key)The relationships form a hierarchy:
- A user can have multiple orders (one-to-many)
- An order can have multiple items (one-to-many)
- An order has one payment record (one-to-one)Final Answer: 与订单相关的表主要有orders(订单主表)、order_items(订单商品明细)和payment_info(支付信息)。orders表通过user_id关联users表,通过address_id关联user_addresses表;order_items表通过order_id关联orders表,通过product_id关联products表;payment_info表通过order_id关联orders表。这些表共同构成了订单系统的核心数据结构。> Finished chain.
{'input': '描述与订单相关的表及其关系','output': '与订单相关的表主要有orders(订单主表)、order_items(订单商品明细)和payment_info(支付信息)。orders表通过user_id关联users表,通过address_id关联user_addresses表;order_items表通过order_id关联orders表,通过product_id关联products表;payment_info表通过order_id关联orders表。这些表共同构成了订单系统的核心数据结构。'}
# 这个任务,实际上数据库中 没有categories表
agent_executor.run("描述categories表")
回答
> Entering new SQL Agent Executor chain...
Action: sql_db_list_tables
Action Input: order_items, orders, payment_info, product_categories, product_images, product_reviews, products, shopping_cart, user_addresses, usersI notice that there isn't a table called "categories" in the database, but there is a table called "product_categories" which might be related. I should check the schema of this table to understand its structure.Action: sql_db_schema
Action Input: product_categories
CREATE TABLE product_categories (category_id NUMBER NOT NULL, category_name VARCHAR(50 CHAR) NOT NULL, parent_id NUMBER, category_level NUMBER(1, 0) NOT NULL, sort_order NUMBER DEFAULT 0, CONSTRAINT sys_c008434 PRIMARY KEY (category_id), CONSTRAINT sys_c008435 FOREIGN KEY(parent_id) REFERENCES product_categories (category_id)
)TABLESPACE "TESTDBSPACE"/*
3 rows from product_categories table:
category_id category_name parent_id category_level sort_order
1001.0 电子产品 None 1 1.0
1002.0 服装 None 1 2.0
1003.0 家居用品 None 1 3.0
*/I now understand the structure of the product_categories table. It appears to be the table that stores category information for products, even though it's not exactly named "categories". Here's the description:Final Answer:
The product_categories table (which serves as the categories table) contains product category information with the following structure:
- category_id: A unique numeric identifier for each category (primary key)
- category_name: The name of the category (up to 50 characters)
- parent_id: References another category as its parent (foreign key to category_id)
- category_level: A numeric value indicating the category's level in the hierarchy
- sort_order: A numeric value used for ordering categories (defaults to 0)Sample categories include:
- Electronics (category_id: 1001)
- Clothing (category_id: 1002)
- Home Goods (category_id: 1003)The table supports hierarchical relationships between categories through the parent_id field.> Finished chain.
"The product_categories table (which serves as the categories table) contains product category information with the following structure:\n- category_id: A unique numeric identifier for each category (primary key)\n- category_name: The name of the category (up to 50 characters)\n- parent_id: References another category as its parent (foreign key to category_id)\n- category_level: A numeric value indicating the category's level in the hierarchy\n- sort_order: A numeric value used for ordering categories (defaults to 0)\n\nSample categories include:\n- Electronics (category_id: 1001)\n- Clothing (category_id: 1002)\n- Home Goods (category_id: 1003)\n\nThe table supports hierarchical relationships between categories through the parent_id field."
注意事项
- 确保你的网络可以访问远程Oracle服务器
- 确保Oracle客户端库已正确安装并配置
- 对于较新的Oracle版本,可能需要使用
service_name
而不是SID
- 如果使用TNS名称,连接字符串格式会有所不同
- 考虑使用环境变量存储敏感信息,而不是硬编码在代码中
相关文章:
使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理
使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理 为完成此次数据库连接实验,笔者用自己的笔记本电脑搭建了一台linux虚机,安装了oracle 23C,并借助deepseek创建了若干与电商业务有关的表并插入了一些记录。 接着在windows实体…...
训练神经网络的批量标准化(使用 PyTorch)
构建神经网络是一门艺术,而非一个结果固定的过程。你无法预知最终能否得到有效的模型,而且有很多因素可能导致你的机器学习项目失败。 然而,随着时间的推移,您还将学会一套特定的笔触,这将大大提高您成功的几率。 在…...
阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其…...
Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)
Vue.js 事件修饰符的功能与具体应用场景 一、事件修饰符 .stop .stop 的主要作用是 阻止事件冒泡,防止事件从子元素传播到父元素。这在处理嵌套组件或多层 DOM 结构时非常有用。 <div click"parentClick">Parent<button click.stop"chi…...
案例分享|20倍提效!水力设备电磁仿真的云端实战
在现代水力设备制造领域,电磁仿真是贯穿设计、研发到故障诊断的核心技术之一。而随着"双碳"目标驱动下清洁能源设备的迭代加速,水轮机、水泵等设备研发的多物理场耦合特性对仿真精度提出前所未有的挑战。传统仿真工具在处理复杂多物理场耦合等…...
ShenNiusModularity项目源码学习(25:ShenNius.Admin.Mvc项目分析-10)
本文学习并分析ShenNiusModularity项目中的留言管理页面、回收站页面。 1、留言管理页面 留言管理页面用于检索、删除系统中的留言数据,该页面对应的文件Index.cshtml位于ShenNius.Admin.Mvc项目的Areas\Cms\Views\Message内。页面使用的控制器类MessageController…...
github使用记录
1. 首次上传本地项目到 GitHub 1.1 准备 GitHub 仓库 登录 GitHub,点击右上角 → New repository输入仓库名称(建议与本地目录同名)选择公开(Public)或私有(Private)不要勾选 "Initiali…...
NFS-网络文件系统
NFS介绍 NFS ( Network File System ) 即网络文件系统 ,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样NFS的好…...
Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备
在 Android 开发中,针对 1920720 分辨率、PPI 100 的屏幕设备进行 UI 适配,需要综合考虑 像素密度(PPI)、屏幕尺寸 和 Android 的密度无关像素(dp) 体系。以下是完整的适配方案: 📌 …...
4.2.4 MYSQL的缓存策略
文章目录 4.2.4 MYSQL的缓存策略1. MYSQL缓存方案用来干什么 2. 缓存相关知识1. mysql主从复制2. 为什么需要缓冲层3. 还有哪些类型数据库 3. 那些方式会提升MYSQL读写性能1. mysql读写分离2. 连接池3. 异步连接 4. 缓存方案是怎么解决的1. redis和MYSQL一致性状态分析1. 流程&…...
省科学技术奖申报答辩PPT设计制作美化
自然科学奖、技术发明奖和科技进步奖是科学技术奖励体系中的三大核心奖项 省科学技术奖的含金量极高,主要体现在经济激励、社会认可、创新驱动及资源整合等方面。其价值不仅在于奖金和荣誉,更在于对科研生态的长远影响,国家科学技术奖的敲门…...
基于 ARM 的自动跟拍云台设计
标题:基于 ARM 的自动跟拍云台设计 内容:1.摘要 摘要:随着摄影和监控需求的不断增长,自动跟拍云台的应用越来越广泛。本设计的目的是开发一款基于 ARM 的自动跟拍云台,以实现对目标的精准跟拍。采用 ARM 微控制器作为核心控制单元࿰…...
Linux电源管理(3)_关机和重启的过程
原文:Linux电源管理(3)_Generic PM之重新启动过程 1.前言 在使用计算机的过程中,关机和重启是最先学会的两个操作。同样,这两个操作在Linux中也存在,可以关机和重启。这就是这里要描述的对象。在Linux Ke…...
SQLMesh增量模型实战指南:时间范围分区
引言 在数据工程领域,处理大规模数据集和高频率数据更新是一项挑战。SQLMesh作为一款强大的数据编排工具,提供了增量模型功能,帮助数据工程师高效地管理和更新数据。本文将详细介绍如何使用SQLMesh创建和管理基于时间范围的增量模型…...
LeetCode -160.相交链表
题目 160. 相交链表 - 力扣(LeetCode) 解法一 哈希表 哈希表解决方案的思路 这个使用哈希表(unordered_set)的解决方案基于一个简单的观察:如果两个链表相交,那么相交点及之后的所有节点都是两个链表共…...
针对Linux挂载NAS供Minio使用及数据恢复的需求
针对Linux挂载NAS供Minio使用及数据恢复的需求,设计以下分阶段解决方案: 一、存储架构设计 存储拓扑 [Minio Server] --> [NAS挂载点 (/mnt/nas/minio-data)] --> [企业级NAS设备]│└─[备份服务器/存储] (可选异地备份)组件版本要求 Minio版本&a…...
【大厂实战】API网关进化史:从统一入口到智能AB分流,如何构建灰度无感知系统?
【大厂实战】API网关进化史:从统一入口到智能AB分流,如何构建灰度无感知系统? 1. 为什么API网关是AB面架构的天然起点? 在分布式微服务架构中,API网关(API Gateway)承担着重要职责:…...
开放平台架构方案- GraphQL 详细解释
GraphQL 详细解释 GraphQL 是一种用于 API 的查询语言,由 Facebook 开发并开源,旨在提供一种更高效、灵活且强大的数据获取和操作方式。它与传统的 REST API 有显著不同,通过类型系统和灵活的查询能力,解决了 REST 中常见的过度获…...
使用 TypeScript 开发并发布一个 npm 包(完整指南)
本教程将一步步教你从零开发、打包并发布一个 TypeScript 工具库到 npm。以日期时间格式化工具为例,涵盖项目初始化、Vite 打包、类型声明输出、npm 配置、实际发布等完整流程,适合开发者直接套用。 文章目录 📁 项目结构预览🧱 初…...
在Anolis OS 8上部署Elasticsearch 7.16.1与JDK 11的完整指南
目录 1. 环境与版本选择 1.1 操作系统选择:Anolis OS 8 1.2 版本匹配说明 1.3 前置条件检查 2. JDK 11安装与配置 2.1 安装流程 2.2 配置详解 3. Elasticsearch 7.16.1安装与优化 3.1 基础安装 3.2 目录规划与权限 3.3 核心配置文件详解 3.4 JVM调优 4. 用户权限管…...
SELinux 从理论到实践:深入解析与实战指南
文章目录 引言:为什么需要 SELinux?第一部分:SELinux 核心理论1.1 SELinux 的三大核心模型1.2 安全上下文(Security Context)1.3 策略语言与模块化 第二部分:实战操作指南2.1 SELinux 状态管理2.2 文件上下…...
巧用 `unittest.mock` 模块实现依赖服务隔离测试
巧用 unittest.mock 模块实现依赖服务隔离测试 引言 在软件开发过程中,单元测试是保障代码质量的核心手段。然而,许多代码依赖于外部服务,如数据库、API 或文件系统,直接进行测试可能会导致: 环境不可控:测试数据可能变化,影响测试结果的稳定性。执行时间长:依赖外部…...
水利三维可视化平台怎么做?快速上手的3步指南
分享大纲: 1、了解水利三维可视化平台 2、选择合适的开发平台 3、快速搭建水利三维可视化平台 第一步:了解水利三维可视化平台 水利三维可视化平台是利用大数据、物联网、数字孪生等技术,将物理实体数字化建模,并通过三维可视化技…...
【DB2】逻辑导出导入注意事项
DB2异构操作系统之间迁移需选择逻辑备份恢复 导出环节 1、设置字符集,源端创建导出目录,并导出数据库DDL db2set db2codepage1208 db2stop force db2start db2look -d YS-e -l -o -createdb db2look_YS.sql导出文件:db2look_YS.sql –详细参数请参考…...
Fiddler抓取APP端,HTTPS报错全解析及解决方案(一篇解决常见问题)
环境:雷电模拟器Android9系统 你所遇到的fiddler中抓取HTTPS的问题可以分为三类:一类是你自己证书安装上逻辑错误,另一种是APP中使用了“证书固定”的手段。三类fiddler中生成证书时的参数过程。 1.Fiddler证书安装上的逻辑错误 更新Opt…...
C语言教程(二十三):C 语言强制类型转换详解
一、强制类型转换的概念 强制类型转换是指在程序中手动将一个数据类型的值转换为另一种数据类型。在某些情况下,编译器可能不会自动进行类型转换,或者自动转换的结果不符合我们的预期,这时就需要使用强制类型转换来明确指定要进行的类型转换。…...
阿里云服务器 篇十二:加入 Project Honey Pot 和使用 http:BL
文章目录 系列文章背景前提条件注册和准备注册安装蜜罐捐赠MX记录(可选)添加 QuickLinks(快速链接)使用 http:BL(HTTP黑名单)获取Access Key(访问秘钥)Apache自动拦截黑名单IP模块Http:BL API文档更多实现案例监控IP空间系列文章 阿里云服务器 篇一:申请和初始化 阿里…...
Android 手动删除 AAR jar 包 中的文件
Duplicate class com.xxxa.naviauto.sdk.listener.OnChangeListener found in modules jetified-xxxa-sdk-v1.1.2-release-runtime (:xxx-sdk-v1.1.2-release:) and jetified-xxxb-sdk-1.1.3-runtime (:xxxb-sdk-1.1.3:) A.aar B.aar 有类冲突; 使用 exclude 排除本地aar无效…...
Tomcat 部署配置指南
## 1. 环境要求 - JDK 8 或更高版本 - Tomcat 8.5/9.x/10.x - Windows 操作系统 ## 2. 安装步骤 ### 2.1 安装JDK 1. 下载并安装JDK 2. 配置环境变量: - JAVA_HOME: JDK安装目录 - Path: 添加 %JAVA_HOME%\bin 3. 验证安装:打开命令提示符&#…...
阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越
阿里千问Qwen3技术解析:突破性优势与对DeepSeek R1的全面超越 在2025年4月29日,阿里巴巴发布了新一代开源大模型Qwen3(通义千问3),凭借其创新架构与显著性能提升,迅速成为全球开源AI领域的焦点。本文将从技…...
宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准
宾馆一次性拖鞋在旅途中很重要。它的卫生情况受大家关注。它的舒适度也受大家关注。扬州卓韵酒店用品在这方面经验丰富。其产品质量优良。下面为你详细介绍宾馆一次性拖鞋。 材质选择目前宾馆一次性拖鞋材质多样。常见的有布质、纸质和塑料的。布质拖鞋相对环保舒适。能给脚部…...
推荐系统中 Label 回收机制之【时间窗口设计】
目录 引言一、业务需求:目标导向的窗口设计1.1 用户行为周期决定窗口基础1.2 业务目标驱动窗口粒度1.3 动态场景下的弹性调整 二、数据特性:窗口设计的底层约束2.1 数据分布与稀疏性适配2.2 数据延迟与完整性保障2.3 特征时效性分层 三、算法模型&#x…...
DevExpressWinForms-XtraMessageBox-使用教程
XtraMessageBox-使用教程 一、基础使用:快速弹出标准消息框 XtraMessageBox 的基础使用非常简单,只需调用XtraMessageBox.Show方法即可弹出一个标准的消息框。根据不同的使用需求,Show方法有多种重载形式。 1.1 仅显示提示信息 当我们仅仅…...
ETL数据集成与数据资产的紧密关联,解锁数据价值新密码
数据已然成为企业最为珍贵的资产之一。无论是传统行业巨头,还是新兴的互联网企业,都在积极挖掘数据背后所蕴含的巨大商业价值。而在这个过程中,ETL(Extract,Transform,Load)作为数据处理的关键环…...
【无报错,亲测有效】如何在Windows和Linux系统中查看MySQL版本
如何在Windows和Linux系统中查看MySQL版本 MySQL作为最流行的开源关系型数据库管理系统之一,了解如何查看其版本信息对于开发者和数据库管理员来说是常用的一个基本操作。本文将详细介绍在Windows和Linux系统中查看MySQL版本的方法。 文章目录 如何在Windows和Linu…...
【Leetcode 每日一题】2962. 统计最大元素出现至少 K 次的子数组
问题背景 给你一个整数数组 n u m s nums nums 和一个 正整数 k k k。 请你统计有多少满足 「 n u m s nums nums 中的 最大 元素」至少出现 k k k 次的子数组,并返回满足这一条件的子数组的数目。 子数组是数组中的一个连续元素序列。 数据约束 1 ≤ n u m s …...
网络爬取需谨慎:警惕迷宫陷阱
一、技术背景:网络爬虫与数据保护的博弈升级 1. 问题根源:AI训练数据爬取的无序性 数据需求爆炸:GPT-4、Gemini等大模型依赖数万亿网页数据训练,但大量爬虫无视网站的robots.txt协议(非法律强制),未经许可抓取内容(如新闻、学术论文、代码),引发版权争议(如OpenAI被…...
‘WebDriver‘ object has no attribute ‘find_element_by_class‘
在使用Selenium进行Web自动化测试时,如果你遇到了错误信息:“‘WebDriver’ object has no attribute ‘find_element_by_class’”,这通常是因为在Selenium 4及以上版本中,find_element_by_* 和 find_elements_by_* 这类方法已经…...
ComfyUI 学习笔记,案例1:2_pass_txt2img
背景 ComfyUI 官方案例学习笔记,本文是跑出的第三个案例,但确是官网案例的第一个,所以运行起来总体比较顺利。整理几点页面使用技巧: 是网页版本,没有 IDEA,而且画布上没有滚动条,想看清楚内容…...
代码颜色模式python
1. CMYK(印刷场景) 例子:某出版社设计书籍封面时,使用 Adobe Illustrator 绘制图案。 红色封面的 CMYK 值可能为:C0, M100, Y100, K0(通过洋红和黄色油墨混合呈现红色)。印刷前需将设计文件转…...
Android第五次面试总结之网络篇(修)
一、域名解析到服务器的过程(DNS 解析流程) 当应用发起网络请求(如https://www.example.com)时,操作系统需先将域名转换为服务器 IP 地址,这一过程通过 DNS(域名系统) 完成…...
JavaScript 作用域全面总结
JavaScript 作用域全面总结 作用域(Scope)是JavaScript中一个核心概念,决定了变量、函数和对象的可访问性。以下是JavaScript作用域的全面总结,结合表格和箭头图进行讲解。 一、作用域类型 JavaScript 作用域类型详解 JavaScript 中有四种主要的作用…...
Redis核心与底层实现场景题深度解析
Redis核心与底层实现场景题深度解析 在互联网大厂Java求职者的面试中,经常会被问到关于Redis的核心与底层实现相关的场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面试现场。…...
代发考试战报:4月份 思科认证,华为认证,考试战报分享
CCNP 300-410考试通过战报,350-401 考试通过战报,CCNA 200-301 考试通过战报,HCIP数通 H12-821考试通过,H12-831考试通过,HCSP 行业金融 H19-611考试通过,HCSE 行业金融 H21-293 考试通过 报名考试一定要找…...
Linux 内核中 TCP 协议的支撑解析
在 Linux 网络协议栈中,TCP(传输控制协议)作为面向连接的可靠传输协议,其实现依赖于一系列复杂的内核机制。本文通过分析四个关键函数(cookie_v4_init_sequence、tcp_fastopen_ctx_destroy、sk_forced_mem_schedule 和 sk_stream_alloc_skb),探讨它们如何共同保障 TCP 的…...
std::string的底层实现 (详解)
目录 std::string的底层实现* 写时复制原理探究 CowString代码初步实现 短字符串优化(SSO) 最佳策略 std::string的底层实现* 我们都知道, std::string的一些基本功能和用法了,但它底层到底是如何实现的呢? 其实在std::stri…...
蓝桥杯 11. 最大距离
最大距离 原题目链接 题目描述 在数列 a1, a2, ⋯, an 中,定义两个元素 ai 和 aj 的距离为: |i - j| |ai - aj|即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对值。 给定一个数列,请找出元素之间最大的元素…...
【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
🚀 使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步 在日常的数据开发工作中,数据同步是一项极其常见的任务。而 DataX 作为阿里开源的一款通用数据同步工具,支持多种数据源之间的互通,使用简单,扩展性强,非常适合进行结构化数据的迁移和同步。 本文将详细介绍如何通…...
Mangodb基本概念和介绍,Mango三个重要的概念:数据库,集合,文档
MongoDB基本概念和介绍 MongoDB 是一个开源的、基于分布式文件存储的NoSQL数据库,由 C 编写。 它的主要特点是: 使用**面向文档(Document-Oriented)**的存储方式,不是传统的表格行列模式。存储的数据格式是BSON&…...
什么是ICSP编程
ICSP编程介绍 ICSP 编程(In-Circuit Serial Programming),即“在线串行编程”,是一种通过 SPI 协议 直接对微控制器(如 Arduino 的 ATmega328P)进行编程的技术,无需移除芯片。它常用于以下场景…...