Python使用sqlite3模块内置数据库
1、python内置的sqlite3模块,创建数据库中的表,并向表中插入数据,从表中取出所有行,以及输出行的数量。
#!/usr/bin/env python3#创建SQLite3内存数据库,并创建带有四个属性的sales表#sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程import sqlite3#使用‘:memory:’在内存中创建了一个数据库,创建了连接对象con来代表数据库con = sqlite3.connect(’:memory:’)#创建表名为sales的表,将这个字符串赋值给queryquery = '''CREATE TABLE sales (customer VARCHAR(20), product VARCHAR(40), amount FLOAT, date DATE);'''#使用连接对象的execute()方法执行query中的SQL命令con.execute(query)#使用连接对象的commit()方法将修改提交(保存)到数据库con.commit()#向表中插入几行数据data = [(’Richard Lucas’,’Notepad’,2.50,’2019-01-02’), (’Jenny Kim’,’Binder’,4.15,’2019-01-05’), (’Svetlana Crow’,’Printer’,155.75,’2019-02-03’), (’Stephen Randolph’,’Computer’,679.40,’2019-02-20’)]#将插入语句赋给变量statement,?是占位符statement = 'INSERT INTO sales VALUES(?,?,?,?)'#因为有四个占位符,这里就需要提供一个包含4个值的元组,executemany()方法为data中的每个数据元组执行#statement中的SQL命令,这里执行了四次insert命令con.executemany(statement,data)#将修改保存到数据库con.commit()#查询sales表,并将命令结果赋值给一个光标对象cursor,光标对象有execute、executemany、fetchone、#fetchmany和fetchall方法cursor = con.execute('SELECT * FROM sales')#返回结果集中的所有行rows = cursor.fetchall()print(rows)print(’………………’)#查询结果中行的数量row_counter = 0for row in rows: print(row) row_counter += 1print(’………………’)print(’Number of rows: %d’ % (row_counter))
Spyder右下角打印出来的结果:
[(’Richard Lucas’, ’Notepad’, 2.5, ’2019-01-02’), (’Jenny Kim’, ’Binder’, 4.15, ’2019-01-05’), (’Svetlana Crow’, ’Printer’, 155.75, ’2019-02-03’), (’Stephen Randolph’, ’Computer’, 679.4, ’2019-02-20’)]………………(’Richard Lucas’, ’Notepad’, 2.5, ’2019-01-02’)(’Jenny Kim’, ’Binder’, 4.15, ’2019-01-05’)(’Svetlana Crow’, ’Printer’, 155.75, ’2019-02-03’)(’Stephen Randolph’, ’Computer’, 679.4, ’2019-02-20’)………………Number of rows: 4
2、python内置的sqlite3模块,向表中插入新纪录
名称为“CSV测试数据.csv”的数据源:
将本地“CSV测试数据.csv”的数据导入到本地数据库football_game.db中:
#!/usr/bin/env python3#创建SQLite3内存数据库,并创建带有四个属性的sales表#sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程import sqlite3import csvinput_file = 'F://python入门//数据1//CSV测试数据.csv'#为一个简单的本地数据库football_game.db创建连接,football_game.db为数据库名称con = sqlite3.connect(’football_game.db’)#创建了一个光标c = con.cursor()#如果表名存在,则删除它drop_table = '''DROP TABLE IF EXISTS football_game;'''c.execute(drop_table)con.commit()#创建表名为football_game的表,将这个字符串赋值给create_tablecreate_table = '''CREATE TABLE IF NOT EXISTS football_game (name VARCHAR(20), sex VARCHAR(10), age INT, score INT, device_number VARCHAR(20), cost VARCHAR(20));'''#使用连接对象的execute()方法执行create_table中的SQL命令c.execute(create_table)#使用连接对象的commit()方法将修改提交(保存)到数据库con.commit()#从CSV格式的输入文件中读取要加载到数据库中的数据,创建file_reader对象,用于存储CSV中的数据集file_reader = csv.reader(open(input_file,’r’),delimiter=’,’)#从输入文件中读入第一行header = next(file_reader,None)#将输入的所有数据进行循环,先是每行循环,再是每列循环for row in file_reader: data = [] for column_index in range(len(header)): data.append(row[column_index]) print(data) c.execute('INSERT INTO football_game VALUES(?,?,?,?,?,?)',data)#将修改保存到数据库con.commit()print(’………………’)#执行选择所有数据的SQLoutput = c.execute('SELECT * FROM football_game')#返回结果集中的所有行,返回的是一个大的列表rows = output.fetchall()print(rows)print(’………………’)for row in rows: output = [] for column_index in range(len(row)): output.append(str(row[column_index])) print(output)
Spyder右下角打印出来的结果:
[’李刚’, ’男’, ’32’, ’567’, ’18512349553’, ’$500.00 ’][’王红’, ’女’, ’54’, ’423’, ’18256785181’, ’$750.00 ’][’孙晓’, ’女’, ’25’, ’457’, ’13698762112’, ’$250.00 ’][’郭亮’, ’男’, ’65’, ’350’, ’18654320816’, ’$125.00 ’][’高英’, ’女’, ’15’, ’390’, ’18511113141’, ’$815.00 ’]………………[(’李刚’, ’男’, 32, 567, ’18512349553’, ’$500.00 ’), (’王红’, ’女’, 54, 423, ’18256785181’, ’$750.00 ’), (’孙晓’, ’女’, 25, 457, ’13698762112’, ’$250.00 ’), (’郭亮’, ’男’, 65, 350, ’18654320816’, ’$125.00 ’), (’高英’, ’女’, 15, 390, ’18511113141’, ’$815.00 ’)]………………[’李刚’, ’男’, ’32’, ’567’, ’18512349553’, ’$500.00 ’][’王红’, ’女’, ’54’, ’423’, ’18256785181’, ’$750.00 ’][’孙晓’, ’女’, ’25’, ’457’, ’13698762112’, ’$250.00 ’][’郭亮’, ’男’, ’65’, ’350’, ’18654320816’, ’$125.00 ’][’高英’, ’女’, ’15’, ’390’, ’18511113141’, ’$815.00 ’]
3、python内置的sqlite3模块,更新数据表中的记录
名称为“CSV测试数据.csv”的数据源:
更新表中的记录:
#!/usr/bin/env python3#创建SQLite3内存数据库,并创建带有四个属性的sales表#sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程import sqlite3import csvinput_file = 'F://python入门//数据1//CSV测试数据.csv'#使用‘:memory:’在内存中创建了一个数据库,创建了连接对象con来代表数据库con = sqlite3.connect(’:memory:’)#创建表名为sales的表,将这个字符串赋值给queryquery = '''CREATE TABLE IF NOT EXISTS sales (customer VARCHAR(20), product VARCHAR(40), amount FLOAT, date DATE);'''#使用连接对象的execute()方法执行query中的SQL命令con.execute(query)#使用连接对象的commit()方法将修改提交(保存)到数据库con.commit()#向表中插入几行数据data = [(’Richard Lucas’,’Notepad’,2.50,’2019-01-02’), (’Jenny Kim’,’Binder’,4.15,’2019-01-05’), (’Svetlana Crow’,’Printer’,155.75,’2019-02-03’), (’Stephen Randolph’,’Computer’,679.40,’2019-02-20’)]#for tuple in data:# print(tuple)#将插入语句赋给变量statement,?是占位符statement = 'INSERT INTO sales VALUES(?,?,?,?)'#因为有四个占位符,这里就需要提供一个包含4个值的元组,executemany()方法为data中的每个数据元组执行#statement中的SQL命令,这里执行了四次insert命令con.executemany(statement,data)#将修改保存到数据库con.commit()#读取CSV文件并更新特定的行file_reader = csv.reader(open(input_file,’r’),delimiter=’,’)#从输入文件中读入第一行header = next(file_reader,None)#将输入的所有数据进行循环,先是每行循环,再是每列循环for row in file_reader: data = [] for column_index in range(len(header)): data.append(row[column_index]) con.execute('UPDATE sales SET amount=?,date=? where customer=?;',data) #将修改保存到数据库con.commit()#查询sales表,并将命令结果赋值给一个光标对象cursor,光标对象有execute、executemany、fetchone、#fetchmany和fetchall方法cursor = con.execute('SELECT * FROM sales')#返回结果集中的所有行rows = cursor.fetchall()print(rows)print(’………………’)for row in rows: output = [] for column_index in range(len(row)): output.append(str(row[column_index])) print(output)
Spyder右下角打印出来的结果:
[(’Richard Lucas’, ’Notepad’, 4.25, ’2019-11-05’), (’Jenny Kim’, ’Binder’, 6.75, ’2019-12-05’), (’Svetlana Crow’, ’Printer’, 155.75, ’2019-02-03’), (’Stephen Randolph’, ’Computer’, 679.4, ’2019-02-20’)]………………[’Richard Lucas’, ’Notepad’, ’4.25’, ’2019-11-05’][’Jenny Kim’, ’Binder’, ’6.75’, ’2019-12-05’][’Svetlana Crow’, ’Printer’, ’155.75’, ’2019-02-03’][’Stephen Randolph’, ’Computer’, ’679.4’, ’2019-02-20’]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。
相关文章: