使用sqlite3建置一个本机资料库,当然要用mssql或自己挂Docker DB也可以
暂时先行,可能後续再依据实际开发状况修改,以下为资料库结构创建SQL
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "Users" (
"UID" INTEGER NOT NULL UNIQUE,
"TYPE" INTEGER NOT NULL,
"NAME" TEXT NOT NULL,
"PWDHASH" TEXT NOT NULL,
PRIMARY KEY("UID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Cards" (
"CID" INTEGER NOT NULL UNIQUE,
"Bind_User" INTEGER,
"Balance" INTEGER NOT NULL DEFAULT 0,
"Frozen" INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY("CID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "transmit_logs" (
"ID" INTEGER NOT NULL UNIQUE,
"TYPE" INTEGER NOT NULL DEFAULT 0,
"STATUS" INTEGER NOT NULL DEFAULT 0,
"Remark" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Order_logs" (
"ID" INTEGER NOT NULL UNIQUE,
"TID" INTEGER,
"Valid" INTEGER NOT NULL DEFAULT 0,
"Shipment_Status" INTEGER NOT NULL DEFAULT 0,
"Order_INFO" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);
COMMIT;
如果目标路径没有档案,会建立一个新的.DB档案
import sqlite3 as db
conn = db.connect(env['SQL']['sqlite_URL'])
print(f"load database from {env['SQL']['sqlite_URL']} successfully")
读取SQL档案并执行
def exec_sqlfile(conn, fp):
try:
with open(fp, 'r') as sql_file:
sql_script = sql_file.read()
cursor = conn.cursor()
cursor.executescript(sql_script)
conn.commit()
conn.close()
print("Execte Script successfully")
return True
except Exception as err:
print(err)
return False
exec_sqlfile(conn=conn, fp="./data/sql/init.sql")
sqlite3的占位符是**?**
格式为cursor.execute(str of sqlscript, (变数)),可以参考
def INS_user(conn, user):
try:
sql = f"INSERT INTO Users (TYPE, NAME, PWDHASH) VALUES (?, ?, ?)"
cursor = conn.cursor()
cursor.execute(sql, (user.type, user.name, user.pwdhash),)
uid = cursor.lastrowid
conn.commit()
conn.close()
print(f"Execte INSERTR user successfully:{uid}")
return uid
except Exception as err:
print(err)
return -1
藉由UID查询User Table中的纪录
def quy_user(conn, uid):
sql = f"SELECT * FROM Users WHERE UID = {uid}"
print(sql)
for row in conn.execute(sql):
print(row)
这边写的比较急,刚烤肉回来月半中,後续可能会再慢慢追加forign key与其他资料库设计,先这样能用就好
大家好,我是长风青云。 今天我跟朋友讨论到我参加比赛这件事,她是一个完全没有程序基础的人。 她告诉我...
If statement if (condition1) { } else if (conditio...
以下笔记摘录自『 The Go Workshop 』。 接续上一篇的学习笔记。 其实可以直接使用fo...
你的心脏不是对称的,就跟你的脸一样。 Alice and Bob 首先要隆重介绍,密码学永远的男主角...
在选择静态档案产生器时,最常看到的就是这三个的比较,我一样会简单的分析三者的特色,并且在最後提供我的...