1、基本介绍:
SQLite是一个开源的轻量级数据库,整个数据库是一个磁盘文件,包在一个相对小的C库中,处理速度快,无服务器,不需要配置.
标准Python库内置了对SQLite数据库连接的支持.它包含sqlite3模块,是Gerhad Haring编写的DB-API V2兼容模块,遵循DB-API 2.0
2、步骤
step 1 --- 连接数据库
step 2 --- 创建数据库的游标
step 3 --- sql命令的建立
step 4 --- 通过execute()函数执行sql命令
import sqlite3
conn = sqlite3.connect("D:\py\龙星.db") #括号里是数据库所在的路径,库名后面要带".db",没有此数据库则创建在指定的路径下
c = conn.cursor() #创建数据库的游标
sql = """CREATE TABLE stock2 (菜名,单价)""" #创建一个名称是stock2的表单,”CREATE TABLE"是创建表单的意思
c.execute(sql) #通过execute()函数执行sql命令
代码输出:

提醒:第二行中的数据库的名称一定要带“.db”后缀,第四行sql括号中的菜名和单价不用加引号,错误示范:("菜名","单价") ,通过创建游标来调用execute()方法执行sql命令.
3、数据的插入和查询:
数据的插入和查询和创建表单一样,同样是通过sql命令实现的,不过相较于创建表单,要注意的一点就是,在数据插入之后,要调用commit()方法保存修改.
单行插入——> 游标.execute("INSERT INTO 表单名称 (值1,值2,...)),值的个数要与表单的列数保持一直,这里有菜单和单价两列,所以值的个数是2.
多行插入——> 多行插入的数据外面套了一层列表,所以多行插入的方式更加安全,也更加灵活,代码如下:
import sqlite3
conn = sqlite3.connect("D:\py\龙星.db")
c = conn.cursor()
# sql = """CREATE TABLE stock2 (菜名,单价)""" 一个相同的数据库不能创建两次,否则会报错
# c.execute(sql)
c.execute("INSERT INTO stock2 VALUES ('白菜','6')") #单行插入
sqls = [('菠菜','4'),('胡萝卜','5')] #多行插入
c.executemany("INSERT INTO stock2 VALUES (?,?)",sqls)
conn.commit() #保存修改
数据查询是先通过执行sql命令选择数据,再通过游标调用fetchall()方法返回一个列表实现的,代码如下:
import sqlite3
conn = sqlite3.connect("D:\py\龙星.db")
c = conn.cursor()
# sql = """CREATE TABLE stock2 (菜名,单价)"""
# c.execute(sql)
c.execute("INSERT INTO stock2 VALUES ('白菜','6')")
sqls = [('菠菜','4'),('胡萝卜','5')]
c.executemany("INSERT INTO stock2 VALUES (?,?)",sqls)
conn.commit()
c.execute("SELECT * FROM stock2") #选择数据库中的全部数据,*表示全部选择,*也可以改为已有的名称,如:单价
print(c.fetchall()) #返回一个包含数据的列表
4、解决表单已存在的报错问题,报错实例:
除了把创建已存在表单的代码注释外,我们还可以通过自定义一个函数的方式避免出现这类报错,代码如下:
import sqlite3
def check(db_name,table_name): #自定义一个check函数,db.name表示数据库名,table_name表示表单名
conn = sqlite3.connect(db_name)
c = conn.cursor()
c.execute('SELECT tbl_name FROM sqlite_master') #sqlite_master表单是数据库自带的,表单中包含了我们添加的所有表单名
values = c.fetchall() #返回包含表单名的列表, 返回形如[('stock2')]
tables = [] #创建一个列表接收表单名称,经下面的for循环处理后,['stock2']
for i in values:
tables.append(i[0])
if table_name in tables: #判断table_name 是否包含在tables列表中
print("表单存在")
return False
else:
return True
if __name__ == '__main__':
conn = sqlite3.connect('D:\py\龙星.db')
c = conn.cursor()
if check('D:\py\龙星.db',"stock2") == True: #如果函数返回值是True,则可以创建表单
c.execute("CREATE TABLE stock2 (名字,年龄)")
大致思路:判断table_name是否已经存在于数据库中,不存在就创建,存在则不创建.