sqlite语法
SQLite 语法大全 - SQLite 教程™语法是一组独特的规则和约定。 以下是 SQLite 的语法列表。 区分大小写: SQLite 不区分大小写。但是,有一些区分大小写的命令。例如:GLOB 和 glob 在 SQLit
语法是一组独特的规则和约定。 以下是 SQLite 的语法列表。
例子:
import sqlite3 # 导入数据库 # 连接数据库 conn = sqlite3.connect('example.db') # 创建一个cursor对象 c = conn.cursor() # 创建表,只需要创建一次,多次则报错 c.execute('''CREATE TABLE stocks(data text, trans text, symbol text, qty real, price real)''') # 插入一条记录 c.execute("INSERT INTO stocks VALUES('2021-11-17','BUY','RHAT',100,35.15)") # excute返回一个元组,可迭代 for row in c.execute('SELECT * FROM stocks ORDER BY price'): print(row) # 提交当前事务,保存数据,否则修改不生效 conn.commit() # 关闭数据库 conn.close()
增删改查
创建
import sqlite3 conn = sqlite3.connect("exercise.db") # 没有该数据库时会自己创建,多次创建报错 cur = conn.cursor() sql = ''' CREATE TABLE student_info ( name text, age int, id int, address char(50), score real ); ''' cur.execute(sql) conn.commit() conn.close()
增加
import sqlite3 conn = sqlite3.connect("exercise.db") cur = conn.cursor() sql = ''' INSERT INTO student_info (name,age,id,address,score) VALUES ("学生2", 20, 201212670, "重庆市南岸区",90) ''' cur.execute(sql) conn.commit() conn.close()
增加多条
创建好的序列
import sqlite3 conn = sqlite3.connect("exercise.db") cur = conn.cursor() persons = [('ABC', 21, 201212634, "北京市朝阳区", 95), ('CLS', 21, 201212340, "长沙市雨花区", 90), ('SXA', 23, 202283194, "郴州市北湖区", 98)] cur.executemany("INSERT INTO student_info VALUES(?,?,?,?,?)", persons) conn.commit() conn.close()
# 迭代器
import sqlite3
import string
# 使用yield语句的函数可以用来创建生成器对象
def char_generator():
for c in string.ascii_lowercase:
yield c,
# a = IterChar()
# for i in a:
# print(i)
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("CREATE TABLE characters(c)")
# 创建迭代器对象
theIter = char_generator()
# 插入记录,每次插入一个小写英文字母
cur.executemany("INSERT INTO characters(c) VALUES(?)", theIter)
# 读取并显示所有记录
cur.execute("SELECT c FROM characters")
print(cur.fetchall())
import sqlite3
# 自定义迭代器,按顺序生成小写字母
class IterChar:
def __init__(self):
self.count = ord('a')
def __iter__(self):
return self
def __next__(self):
if self.count > ord('z'):
raise StopIteration
self.count += 1
return chr(self.count - 1)
# a = IterChar()
# for i in a:
# print(i)
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("CREATE TABLE characters(c)")
# 创建迭代器对象
theIter = IterChar()
# 插入记录,每次插入一个小写英文字母
cur.executemany("INSERT INTO characters(c) VALUES(?)", theIter)
# 读取并显示所有记录
cur.execute("SELECT c FROM characters")
print(cur.fetchall())
删除
print('I just delete', cur.execute("DELETE FROM student_info WHERE name='ABC' OR name='CLS' OR name='SXA'").rowcount, 'rows')
查
cur.execute("SELECT * FROM student_info WHERE address='重庆市南岸区' ORDER BY age ") print(cur.fetchall())
问号占位后,传入一个包含占位符对应元素的列表。如VALUES(?,?)对应’ALICE’和30,则列表为[‘ALICE’, 30]
使用变量名称作为占位符
import sqlite3 conn = sqlite3.connect(":memory:") cur = conn.cursor() cur.execute('CREATE TABLE example(name, age)') name_var = 'ALICE' age_var = 30 cur.execute("INSERT INTO example VALUES(:name_var, :age_var)", {'name_var': name_var, 'age_var': age_var}) cur.execute("SELECT * FROM example") print(cur.fetchall())
注意变量名称占位时,是”:varible“的形式。
变量名称占位后,传入一个字典,解释占位符对应的变量。
sqlite3.Row类
一般可以通过以下方法获得表里的数据
1.cur为sqlite3.Cursor对象,通过cur.execute()执行SELECT语句可以作为迭代器输出数据。 age_var = 20 cur.execute("SELECT * FROM student_info WHERE age=:age_var", {'age_var': age_var}) for row in cur: print(row) 2.当执行完cur.execute()后,cur为一个迭代器,此时cur.fetchone()相当于一个next方法返回一个元组,cur.fetchall()返回一个包含所有元组的列表。 age_var = 20 cur.execute("SELECT * FROM student_info WHERE age=:age_var", {'age_var': age_var}) row = cur.fetchone() print(row) 3.使用sqlite3.Row类后,cur为一个迭代器,此时cur.fetchone返回的是更高级的sqlite3.Row而不是元组。 import sqlite3 conn = sqlite3.connect(':memory:') conn.row_factory = sqlite3.Row # 使用更高级的sqlite3.Row类,而不是python的元组 c = conn.cursor() c.execute('''CREATE TABLE stocks(data text, trans text, symbol text, qty real, price real)''') c.execute("INSERT INTO stocks VALUES('2021-11-17','BUY','RHAT',100,35.15)") c.execute("SELECT * FROM stocks") r = c.fetchone() print(type(r)) # <class 'sqlite3.Row'> print(tuple(r)) # ('2021-11-17', 'BUY', 'RHAT', 100.0, 35.15) print(r[2]) # RHAT print(r.keys()) # ['data', 'trans', 'symbol', 'qty', 'price'] print(r['qty']) # 100.0 for field in r: # 可迭代 print(field)
相较于元组,sqlite3.Row支持:
使用keys()输出表的键
按key输出数据,如r[‘qty’]
————————————————
区分大小写:
- SQLite 不区分大小写。但是,有一些区分大小写的命令。例如:
GLOB
和glob
在 SQLite 语句中有不同的含义。
注释:
- 注释用于在 SQLite 代码中增加代码的可读性。
- 注释不能嵌套。
- 注释以两个连续的 “
-
” 字符。 - 也可使用 “
/*
” 字符开始,并延伸至下一个 “*/
” 字符对所包括的内容视为注释。
SQLite 语句
所有的 SQLite 语句都是以关键字 (如:SELECT
,INSERT
,UPDATE
,DELETE
,ALTER
,DROP
等) 开始的。所有语句都以分号 (;
) 结尾。
SQLite ANALYZE 语句的语法:
ANALYZE; ANALYZE database_name; ANALYZE database_name.table_name;
SQLite AND/OR 子句的语法:
SELECT column1, column2....columnN FROM table_name WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQLite ALTER TABLE 语句的语法
ALTER TABLE table_name ADD COLUMN column_def...;
SQLite ALTER TABLE 语句 (Rename) 语句的语法
ALTER TABLE table_name RENAME TO new_table_name;
SQLite ATTACH DATABASE 语句的语法:
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';
SQLite BEGIN TRANSACTION 语句的语法:
BEGIN; BEGIN EXCLUSIVE TRANSACTION;
SQLite BETWEEN 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name BETWEEN val-1 AND val-2; SQLite COMMIT Statement: COMMIT;
SQLite CREATE INDEX 语句的语法:
CREATE INDEX index_name ON table_name ( column_name COLLATE NOCASE );
SQLite CREATE UNIQUE INDEX 语句的语法:
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...columnN);
SQLite CREATE TABLE 语句的语法:
CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ));
SQLite CREATE TRIGGER 语句的语法:
CREATE TRIGGER database_name.trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN stmt1; stmt2; .... END;
SQLite CREATE VIEW 语句的语法:
CREATE VIEW database_name.view_name AS SELECT statement....;
SQLite CREATE VIRTUAL TABLE 语句的语法:
CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log ); CREATE VIRTUAL TABLE database_name.table_name USING fts3( );
SQLite COMMIT TRANSACTION 语句的语法:
COMMIT;
SQLite COUNT 语句的语法:
SELECT COUNT(column_name) FROM table_name WHERE CONDITION;
SQLite DELETE 语句的语法:
DELETE FROM table_name WHERE {CONDITION};
SQLite DETACH DATABASE 语句的语法:
DETACH DATABASE 'Alias-Name';
SQLite DISTINCT 语句的语法:
SELECT DISTINCT column1, column2....columnN FROM table_name;
SQLite DROP INDEX 语句的语法:
DROP INDEX database_name.index_name;
SQLite DROP TABLE 语句的语法:
DROP TABLE database_name.table_name;
SQLite DROP VIEW 语句的语法:
DROP INDEX database_name.view_name;
SQLite DROP TRIGGER 语句的语法:
DROP INDEX database_name.trigger_name;
SQLite EXISTS 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name EXISTS (SELECT * FROM table_name );
SQLite EXPLAIN 语句的语法:
EXPLAIN INSERT statement...; EXPLAIN QUERY PLAN SELECT statement...;
SQLite GLOB 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name GLOB { PATTERN };
SQLite GROUP BY 语句的语法:
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name;
SQLite HAVING 语句的语法:
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name HAVING (arithematic function condition);
SQLite INSERT INTO 语句的语法:
INSERT INTO table_name( column1, column2....columnN) VALUES ( value1, value2....valueN);
SQLite IN 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name IN (val-1, val-2,...val-N);
SQLite Like 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name LIKE { PATTERN };
SQLite NOT IN 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name NOT IN (val-1, val-2,...val-N);
SQLite ORDER BY 语句的语法:
SELECT column1, column2....columnN FROM table_name WHERE CONDITION ORDER BY column_name {ASC|DESC};
SQLite PRAGMA 语句的语法:
PRAGMA pragma_name;
有关pragma
的几个示例:
PRAGMA page_size; PRAGMA cache_size = 1024; PRAGMA table_info(table_name);
SQLite RELEASE SAVEPOINT 语句的语法:
RELEASE savepoint_name;
SQLite REINDEX 语句的语法:
REINDEX collation_name; REINDEX database_name.index_name; REINDEX database_name.table_name;
SQLite ROLLBACK 语句的语法:
ROLLBACK; ROLLBACK TO SAVEPOINT savepoint_name;
SQLite SAVEPOINT 语句的语法:
SAVEPOINT savepoint_name;
SQLite SELECT 语句的语法:
SELECT column1, column2....columnN FROM table_name;
SQLite UPDATE 语句的语法:
UPDATE table_name SET column1 = value1, column2 = value2....columnN=valueN [ WHERE CONDITION ];
SQLite VACUUM 语句的语法:
VACUUM; SQLite WHERE Clause: SELECT column1, column2....columnN FROM table_name WHERE CONDITION;
使用 execute 方法执行一条SQL语句,如果带有参数可以使用占位符来传递参数。使用占位符已经考虑到转码的问题,不需要自己单独处理。不用去管 SQL 注入的问题。不过占位符只是针对value,不能用于设置表名,字段等。 SQLite3支持两种占位符:问号占位符和命名占位符。 问号占位符 采用问号作为占位符,参数为元组形式。例如: cur.execute("insert into people values (?, ?)", (who, age)) 命名占位符 采用冒号加 key 的形式作为占位符,参数为字典形式。例如: cur.execute("select * from people where name=:who and age=:age", {"who": who, "age": age}) 使用说明 一般来话,第一种方式比较方便,也比较常见。但是如果在执行sql语句需要同一个参数多次使用时,采用第二种方式就比较合适
本文来自博客园,作者:游走De提莫,转载请注明原文链接:https://www.cnblogs.com/Gaimo/p/15709054.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-12-19 linux-权限管理相关