AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[sqlite](coding)

Martin Hope
Alexey Starinsky
Asked: 2025-03-07 22:18:18 +0800 CST

让SQLite生成ROWID的唯一值

  • 6

我orders在 SQLite 数据库中有一个表:

CREATE TABLE orders
(
    clientId INTEGER NOT NULL,
    listId INTEGER,
    exchangeId NOT NULL,
    marketId NOT NULL,
    id INTEGER NOT NULL,
    accountType NOT NULL,
    clientGuid NOT NULL,
    side NOT NULL,
    type NOT NULL,
    status NOT NULL,
    price NOT NULL,
    stopPrice NOT NULL,
    amount NOT NULL,
    filled NOT NULL,
    cost NOT NULL,
    createTime NOT NULL,
    updateTime NOT NULL,
    PRIMARY KEY(clientId)
);

当我创建一条记录、删除它然后创建另一条新记录时,我得到了相同的 clientId (14443):

SQL> INSERT INTO orders (listId, exchangeId, marketId, id, accountType, clientGuid, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime) VALUES (19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000);


SQL> select * from orders where marketid='mymarket';

(14443, 19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000)

SQL> DELETE FROM orders WHERE clientId=14443;


SQL> INSERT INTO orders (listId, exchangeId, marketId, id, accountType, clientGuid, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime) VALUES (19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000);


SQL> select * from orders where marketid='mymarket';

(14443, 19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000)

但是文档中有以下内容:

为新行选择的 ROWID 至少比同一张表中曾经存在过的最大 ROWID 大 1 。

所以根据clientId重新创建的记录的文档应该是 14444,对吗?

如果已删除的订单之一错误地保留在应用程序中的某个位置,则新clientId订单与先前删除的订单相匹配的事实clientId会导致潜在的错误。clientId

有没有办法让 SQLite 生成唯一的clientId?

sqlite
  • 1 个回答
  • 20 Views
Martin Hope
Alexey Starinsky
Asked: 2025-02-27 05:19:19 +0800 CST

无法将一个表中的所有记录插入到另一个表

  • 5

我有两张桌子:

CREATE TABLE new_orders
(
    clientId INTEGER NOT NULL,
    exchangeId NOT NULL,
    marketId NOT NULL,
    id INTEGER NOT NULL,
    accountType NOT NULL,
    listId INTEGER NOT NULL,
    clientGuid NOT NULL,
    side NOT NULL,
    type NOT NULL,
    status NOT NULL,
    price NOT NULL,
    stopPrice NOT NULL,
    amount NOT NULL,
    filled NOT NULL,
    cost NOT NULL,
    createTime NOT NULL,
    updateTime NOT NULL,
    PRIMARY KEY(clientId)
)

CREATE TABLE old_orders
(
    exchangeId NOT NULL,
    marketId NOT NULL,
    id INTEGER NOT NULL,
    accountType NOT NULL,
    listId INTEGER NOT NULL,
    clientId NOT NULL,
    side NOT NULL,
    type NOT NULL,
    status NOT NULL,
    price NOT NULL,
    stopPrice NOT NULL,
    amount NOT NULL,
    filled NOT NULL,
    cost NOT NULL,
    createTime NOT NULL,
    updateTime NOT NULL,
    PRIMARY KEY(accountType, marketId, id) WITHOUT ROWID
)

当我尝试将所有记录从 old_orders 插入到 new_orders 并clientId使用以下查询自动生成新记录时:

    INSERT INTO new_orders 
        SELECT clientId AS clientGuid, exchangeId, marketId, id, accountType, listId, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime 
        FROM old_orders;

但查询失败并出现以下错误:

表 new_orders 有 17 列,但提供了 16 个值

如何实现这个功能?

new_orders.clientId是自动增量列,对吧?那么为什么这个查询不起作用?

sqlite
  • 2 个回答
  • 27 Views
Martin Hope
Mayor of the Plattenbaus
Asked: 2025-02-12 05:56:43 +0800 CST

带有 sqlite 的 API 平台:找不到驱动程序

  • 6

我正在使用API Platform Symfony 环境的轻微修改版本。由于该环境中内置的 postgres 系统的一部分目前对我来说不起作用,因此我重新使用 sqlite 作为数据库提供程序。

在浏览器中加载我的 Symfony 应用程序的任何数据库连接页面时,我都会得到一些意料之中的结果An exception occurred in the driver: could not find driver。这是有道理的,因为 docker compose 设置默认未配置为使用 sqlite。

令我惊讶的是,在相关机器上安装驱动程序实际上有多么困难。根据在其他一些问题/答案中看到的信息,以下是我尝试添加到 Dockerfile 中但没有成功的内容:

RUN apt update && apt upgrade -y
RUN apt-get install -y ca-certificates apt-transport-https
RUN apt-get install -y software-properties-common
RUN apt-get install -y python3-launchpadlib
RUN add-apt-repository http://archive.ubuntu.com/ubuntu noble-updates/main
RUN add-apt-repository ppa:ondrej/php
RUN apt update
RUN apt upgrade
RUN apt install -y php7.3-sqlite3
RUN rm -rf /var/lib/apt/lists/*

不幸的是,执行时会产生以下输出docker compose build --no-cache:

=> ERROR [php frankenphp_base  9/17] RUN apt update                                                                                                         0.8s
------
 > [php frankenphp_base  9/17] RUN apt update:
0.150 
0.150 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
0.150 
0.223 Hit:1 http://deb.debian.org/debian bookworm InRelease
0.225 Hit:2 http://deb.debian.org/debian bookworm-updates InRelease
0.239 Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease
0.345 Ign:4 https://ppa.launchpadcontent.net/ondrej/php/ubuntu bookworm InRelease
0.372 Err:5 https://ppa.launchpadcontent.net/ondrej/php/ubuntu bookworm Release
0.372   404  Not Found [IP: 185.125.190.80 443]
0.452 Reading package lists...
0.763 E: The repository 'https://ppa.launchpadcontent.net/ondrej/php/ubuntu bookworm Release' does not have a Release file.
------
failed to solve: process "/bin/sh -c apt update" did not complete successfully: exit code: 100

有人知道安装这个难以捉摸的包(或功能等效包)的巧妙方法吗?

===

编辑:我后来才意识到我找错了方向。我的应用程序是通过symfony serve主机系统提供的,而不是在 docker 容器内提供的。我一意识到这一点,就确认apt 包已经安装。之后,只需取消注释文件php-sqlite3中的行,然后重新启动命令即可……瞧!一切正常!php.ini;extension=pdo_sqlitesymfony serve

sqlite
  • 1 个回答
  • 44 Views
Martin Hope
Farhad
Asked: 2025-01-09 18:30:17 +0800 CST

如何使用 MATLAB 将 NULL 值插入 SQLite 数据库表?

  • 8

我正在 MATLAB 中使用 SQLite 数据库,并尝试将 NULL 值插入表的某些字段。但是,当我尝试插入 NULL 时,MATLAB 会抛出错误。以下是示例:

% Define the SQLite database file name
dbFileName = 'example.db';

% Delete the database file if it exists
if exist(dbFileName, 'file') == 2
    delete(dbFileName);
end

% Connect to the SQLite database
conn = sqlite(dbFileName, 'create');

% Create a sample table
createTableQuery = [ ...
    'CREATE TABLE example_table (' ...
    'id INTEGER PRIMARY KEY, ' ...
    'name TEXT, ' ...
    'age INTEGER DEFAULT NULL' ...
    ')'];
exec(conn, createTableQuery);

% Insert data with a NULL value for the 'age' field
insert(conn, 'example_table', {'id', 'name', 'age'}, {1, 'John', []});

% Close the database connection
close(conn);

当我运行此代码时,MATLAB 抛出以下错误:

Error using sqlite/insert
Inconsistent row counts for column 0 (1) and column 2 (0).
Error in test (line 22)
insert(conn, 'example_table', {'id', 'name', 'age'}, {1, 'John', []}); 

如果我将 [] 替换为 0,插入会成功,但这不是真正的 NULL 值。如何使用 MATLAB 将实际 NULL 值插入 SQLite 数据库表?是否有特定的语法或解决方法?

sqlite
  • 1 个回答
  • 24 Views
Martin Hope
tkj80
Asked: 2024-12-18 06:35:46 +0800 CST

连接到 sqlite3 终端上的数据库

  • 5

我打开了位于此文件夹中的 sqlite3.exe 应用程序:

C:\Users\myname\AppData\Local\anaconda3\Library\bin

终端出现以下提示:

SQLite>

我的 my.db 文件位于 C:\Users\myname\Desktop\sqlite-python

我如何运行此代码来连接到我的数据库?

sqlite3 my.db

当我尝试上述代码的几个变体时,我在终端中不断得到新行 ...>。

sqlite
  • 1 个回答
  • 14 Views
Martin Hope
Antonella Masini
Asked: 2024-12-07 18:51:46 +0800 CST

GET 端点未显示 Swagger 中的数据,仅获取“null”,为什么?[重复]

  • 6
这个问题已经有答案了:
如何在 FastAPI 中定义具有不同路径但相同路径参数的多个 API 端点? (1 个回答)
昨天休息。

FastApi 未输出用户。我试图获取数据库表 Users 中的所有用户。但是,每当我尝试使用 swagger 时,我都会得到“null”。我已经检查了我的表是否已填充,如下所示:

sqlite> SELECT * FROM users;
1|creator|creator|creator|creator|$2b$12$.RvErMYWQ7buaWKh7l6JGeCxGtiX7D9z5zHLHxib61J4oJF/XWjP.|2024-12-06T21:27:27.678917
2|tim|[email protected]|Tim|Try|$2b$12$3.8B78wv33qEQihcSBGak./7afLxCX2dPnEnTR/mf.npLRJ9ZCNEG|2024-12-06T23:15:35.844103

我有这两个获取端点,第一个用于获取一个用户的信息的端点工作正常,但第二个端点却给我 null:

@router.get("/{username}")
def get_user(db: db_dependency, username: str):
    # SELECT * FROM Users WHERE user_id = user_id
    user = db.query(Users).filter(Users.username == username).first()
    return user


@router.get("/all")
def get_users(db: db_dependency):
    # SELECT * FROM Users
    users = db.query(Users).all()
    return users

我认为这可能与 .all() 有关,但不同文件中的另一个端点运行良好:

@router.get("/coffee-shops/all"):
def get_all_coffee_shops(db: db_dependency):
    # SELECT * FROM coffee_shops_table
    return db.query(CoffeeShops).all() 

我真的不明白发生了什么。有什么想法吗?

sqlite
  • 1 个回答
  • 28 Views
Martin Hope
FlameDra
Asked: 2024-11-17 07:51:43 +0800 CST

我该如何用双重引用简化这个模型?

  • 5

我的 CRUD 应用程序的数据模型:

在此处输入图片描述

设置 FilmGroup 模型的正确方法是什么?它与 Film 具有一对多关系,与 FilmOrder 具有一对一关系。

我需要 FilmOrderID 和 FilmOrder 来将 FilmOrderID 与此模型关联起来,但也希望轻松访问关联的 FilmOrder,因为我将所有数据呈现给用户。

如何简化 FilmGroup 模型,使其不需要 FilmOrderID 和对 FilmOrder 对象的引用?如何映射FilmOrder *FilmOrder到数据库字段?我想对数据库模型使用相同的结构并显示对象。

sqlite
  • 1 个回答
  • 51 Views
Martin Hope
MarkS
Asked: 2024-11-04 21:50:19 +0800 CST

返回日期的年月日(每个记录)

  • 5

按照 SQL 书籍操作。使用 SQLite。

练习是归还‘庆祝日’。每个员工生日的月份第一天。

返回完整日期,其中星期始终为“01”。

以下代码运行,但未产生预期的结果。

SELECT
 FirstName ||' '|| LastName AS [Full Name],
 STRFTIME('%Y-%m-%d', BirthDate) AS [Birthday No Timecode],
 DATE(STRFTIME('%m'), 'start of month') AS [Celebrated on]
FROM
 employees;

结果如下:

Andrew Adams    1962-02-18  -4713-12-01
Nancy Edwards   1958-12-08  -4713-12-01
Jane Peacock    1973-08-29  -4713-12-01
Margaret Park   1947-09-19  -4713-12-01
Steve Johnson   1965-03-03  -4713-12-01
Michael Mitchell    1973-07-01  -4713-12-01
Robert King 1970-05-29  -4713-12-01
Laura Callahan  1968-01-09  -4713-12-01

我希望所有八名员工的最后一列都是“年-月-01”。

因此,第一个应该返回 1962-02-01,下一个应该返回 1958-12-01,等等。

尝试合并“月初”,如下所述: https: //www.sqlite.org/lang_datefunc.html

注意:我也尝试过:DATE(STRFTIME('%Y-%m'), 'start of month') AS [Celebrated on] 但这会为最后一列中的每个日期返回 Null。

我想要做的是读取每个员工出生日期中的月份,然后使用“月初”获取该月的第一天,然后返回完整的年份-月份-01。

要么是我的语法不好,要么是我的技术有缺陷。

sqlite
  • 2 个回答
  • 26 Views
Martin Hope
MarkS
Asked: 2024-10-10 03:57:01 +0800 CST

SQLite 中的总计列

  • 5

SQL 新手。 真的很新手……

以下代码产生所需的(并且正确的)输出:

SELECT
  SUM (CASE WHEN Total < 2.00 THEN 1 ELSE 0 END) AS 'A',
  SUM (CASE WHEN Total BETWEEN 2.00 and 6.99 THEN 1 ELSE 0 END) AS 'B',
  SUM (CASE WHEN Total BETWEEN 7.00 AND 15.00 THEN 1 ELSE 0 END) AS 'C',
  SUM (CASE WHEN Total > 15.00 THEN 1 ELSE 0 END) AS 'D'
FROM
 invoices
ORDER BY
 BillingCity;
 A   B   C   D
170 120 111 11

我想添加一个“E”列,其中应包含总计(412)。

不知道该怎么做。是的,我用 Google 搜索过。在这里看到一些帖子,但没有一个能满足我的要求。

sqlite
  • 1 个回答
  • 19 Views
Martin Hope
The Fool
Asked: 2024-09-18 14:10:17 +0800 CST

将 csv 导入 sqlite3 时将十六进制解释为数字

  • 5

我对 sqlite 中的十六进制数字有疑问。

给定一个包含数字的 CSV 文件,其中一个数字写为十六进制 (0x1)

❯ cat my.csv
A,B
1,0x1

导入并检查架构

❯ sqlite3 my.db ".import --csv my.csv somet"
❯ sqlite3 my.db ".schema somet"
CREATE TABLE IF NOT EXISTS "somet"(
"A" TEXT, "B" TEXT);

现在我们可以选择 A 作为实数(没有单引号),但不能选择 B。

❯ sqlite3 my.db "select * from somet where a = 0x1;"
1|0x1

❯ sqlite3 my.db "select * from somet where b = 0x1;"

这对我来说是意料之外的。我们可以看到,SQLite 在 A 列上进行过滤时可以理解数字的十六进制表示,但在 B 列上却不能。

查看 A 的输出时,我们还看到 b 并未存储为数字,而似乎存储为一个十六进制字符串。

因此,鉴于 sqlite3 理解十六进制表示形式,并且它将使用数字作为“数字”,当导入 csv 时,为什么 B 不作为数字导入?

sqlite
  • 1 个回答
  • 20 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve