SQL:sqlite3数据库常用操作
发表于:2022-07-26 |
常用数据类型
NULL - 空值
INTERGER - 有符号整数类型
REAL - 浮点数类型
TEXT - 字符串(其编码取决于DB的编码)
BLOB - 二进制表示(binary large object),二进制大对象
常用操作
数据库的常用操作,基本都是四个:增、删、改、查
-- 新增表
CREATE TABLE IF NOT EXISTS "user" (
    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "name" TEXT,
    "age" INTEGER,
    "icon" TEXT
);

-- 插入记录
INSERT INTO user (name, age, icon) VALUES ("Tom", 23, "Tom_icon");
INSERT INTO user (name, age, icon) VALUES ("Jimi", 24, "Jimi_icon");
INSERT INTO user (name, age, icon) VALUES ("Jack", 25, "Jack_icon");
INSERT INTO user (name, age, icon) VALUES ("Mike", 26, "Mike_icon");

-- 新建表,从已有表导入记录
CREATE TABLE IF NOT EXISTS new_user(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name TEXT
) 

INSERT INTO new_user(name) SELECT name FROM user; 
-- 新建一个临时表
CREATE TABLE IF NOT EXISTS "user_name" ("name" TEXT);

-- 删除表
DROP TABLE IF EXISTS user_name;

-- 删除记录
DELETE FROM user WHERE id = 1;
-- 修改表
ALTER TABLE user RENAME TO new_user;
ALTER TABLE new_user RENAME TO user;

-- 表结尾增加一列
ALTER TABLE "user" ADD COLUMN note TEXT;

-- 修改记录
UPDATE user SET name = "杰克" WHERE name = "Jack";
UPDATE user SET name = "汤姆" WHERE name = "Tom";

UPDATE user SET icon = "iconxxx" WHERE age >= 25;
 -- 查询 * 表示所有
 SELECT * FROM user;

-- 查询部分字段
SELECT name, age FROM user;

-- 条件约束
SELECT name FROM user WHERE age >= 25;

-- 模糊查询  使用like关键词 %零个或多个
SELECT name, icon FROM user WHERE icon LIKE "%icon%";

-- 模糊查询   "_" 一个字符 
SELECT name FROM user WHERE name LIKE "汤_";

-- 查询数量
SELECT COUNT(*) FROM user;

SELECT COUNT(name) FROM user;

-- 排序  默认:ASC (ascend)  升序
SELECT * FROM user ORDER BY age;

-- 降序 DESC (desend) 
SELECT * FROM user ORDER BY age DESC;

-- 分页查询 LIMIT, 查询5条
SELECT * FROM user LIMIT 5;

-- 前面跳过3条,查询5条
SELECT * FROM user LIMIT 3, 5;

-- 字段别名
SELECT name AS n, age AS a FROM user;

-- 表别名
SELECT t.name, t.age FROM user AS t;

    – 表结构
如果想列出该数据库中的所有表,可:

.tables

如果想查看这些表的结构:

select * from sqlite_master where type="table";

默认情况下,不会出现红框中的表头,需要之前设置,命令为:

.header on

如果只想查看具体一张表的表结构,比如查看emperors表,命令为:

select * from sqlite_master where type="table" and name="emperors";

另外,也可以这样:

sqlite> .schema emperors 
CREATE TABLE emperors( id integer primary key autoincrement, name text,dynasty text,start_year text);

##sqlite3 /home/git/gogs/data/gogs.db

  执行更新语句即可,以下哈希对应的密码是 123456

update user set passwd='b4af39cca17a2231fead3c06908d352fd367c123fceb7256caeedf032b0d87c8a00a0e86a72f100362




sqlite命令
创建数据库:在控制台sqlite3 name

.databases                 查看数据库
.tables                      查看表格名
databaseName .dump > dumpName     将数据库存在文本文件dumpName中,恢复就用databaseName < dumpName;
attach database 'one' as 'other'   将两个数据库绑定在一起;
detach database 'name'             分离数据库;
.schema tableName                  查看表格详情;
create table name;                 创建表;
drop table name;                   删除表;
 
 python3中的sqlite3模块
 
sqlite3.connect(database [,timeout ,other optional arguments]) 打开数据库;如果指数据库存在则返回一个连接对象,如果不存在则会创建一个数据库;
connection.cursor()创建一个cursor;
cursor.execute(sql) 执行一个sql语句,该语句可以被参数化;
connection.execute(sql) 该例程是上面执行的由光标(cursor)对象提供的方法的快捷方式,它通过调用光标(cursor)方法创建了一个中间的光标对象,然后通过给定的参数调用光标的 execute 方法。
cursor.executemany(sql,seq_of_parameters) 对​​seq_of_parameters​​ 中的所有参数或映射执行一个 SQL 命令connection.executemany(sql,seq_of_parameters) 快捷方式;
cursor.executescript(sql_script) 该例程一旦接收到脚本,会执行多个 SQL 语句。它首先执行 COMMIT 语句,然后执行作为参数传入的 SQL 脚本。所有的 SQL 语句应该用分号(;)分隔
connection.executescript(sql_script) 快捷方式;
connection.total_changes() 返回自数据库连接打开以来被修改、插入或删除的数据库总行数;
connection.commit() 交当前的事务。如果您未调用该方法,那么自您上一次调用 commit() 以来所做的任何动作对其他数据库连接来说是不可见的。
connection.rollback() 回滚自上一次调用commit()以来对数据库所做的更改;
connection.close() 关闭数据库连接。请注意,这不会自动调用 commit()。如果您之前未调用 commit() 方法,就直接关闭数据库连接,您所做的所有更改将全部丢失!
conncction.fetchmany([size=cursor.arraysize[) 该方法获取查询结果集中的下一行组,返回一个列表。当没有更多的可用的行时,则返回一个空的列表。该方法尝试获取由 size 参数指定的尽可能多的行。
cursor.fetchall() 该例程获取查询结果集中所有(剩余)的行,返回一个列表。当没有可用的行时,则返回一个空的列表。
补充:连接MySql数据库需用MySQLdb模块来连接;Access数据库用DAO或ADO模块进行连接
上一篇:
Linux/Ubuntu 关机/取消关机/重启命令
下一篇:
Ubuntu下keepalived和nginx实现高可用性负载均衡