数据库duckdb
with运行
import duckdb
with duckdb.connect('验证.duckdb', read_only=True) as con: # read_only只读
result = con.execute("SELECT * FROM 日志").fetch_df() # 获取DataFrame格式
result = con.execute("SELECT * FROM 日志").fetchall() # 获取所有
result = con.execute("SELECT * FROM 日志").fetchone() # 获取一条
result = con.sql("SELECT * FROM 日志").show() # 显示数据
获取所有表,及结构
import duckdb
with duckdb.connect('验证.duckdb') as con:
# 查看所有表
tables = con.sql("SHOW TABLES").fetchall()
for table in tables:
print(table[0]) # 表名在结果的第一列
jiegou = con.sql(f"DESCRIBE {table[0]}").fetchdf()
print(jiegou)
添加记录
import duckdb
with duckdb.connect("验证.duckdb") as con:
con.execute(
"""INSERT INTO 表名字 (列名字, 列名字, 列名字)VALUES (?, ?, ?)""",(1, 1, 1),)
删除记录
con.execute("DELETE FROM 表名字 WHERE 列名字 = '1'") # 约束
con.execute("DELETE FROM 表名字") # 清空数据
更新数据
con.execute("""
UPDATE 表名字
SET
列名字 = ?,
列名字 = ?
WHERE 列名字 = ?
""", (1,1,1))
强制删除表
con.execute("DROP TABLE 表名字")
创建表格
CREATE TABLE user_info (
-- 整数类型
age int, -- 不制定长度整数
age TINYINT, -- 8位整数(-128~127)
small_value SMALLINT, -- 16位整数(-32768~32767)
login_count INTEGER, -- 32位整数(-2,147,483,648 到 2,147,483,647)
user_id BIGINT, -- 64位整数(适合天文数字)
-- 浮点类型
salary DOUBLE, -- 64位双精度浮点数
rating FLOAT, -- 32位单精度浮点数
balance DECIMAL(10,2), -- 精确小数(总位数10,小数位2)
-- 字符类型
username VARCHAR(50), -- 可变长度字符串(最大50)
country CHAR(2), -- 定长字符串(2字符)
description TEXT, -- 不限长文本
-- 日期/时间类型
birth_date DATE, -- 日期(YYYY-MM-DD)
last_login TIMESTAMP, -- 时间戳(YYYY-MM-DD HH:MM:SS)
work_hours TIME, -- 时间(HH:MM:SS)
-- 其他类型
is_active BOOLEAN, -- 布尔值(TRUE/FALSE)
avatar BLOB, -- 二进制数据
user_uuid UUID, -- UUID字符串
-- ★★★ 约束条件统一放在最后 ★★★
PRIMARY KEY (user_id),
CHECK (age >= 0 AND age <= 120),
UNIQUE (username),
FOREIGN KEY (country) REFERENCES countries(code),
CONSTRAINT valid_salary CHECK (salary > 0)
);
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果