建议通过 使用Python的SQL |集1 和 使用Python和SQLite的SQL |集2
null
在之前的文章中,数据库的记录仅限于小尺寸和单元组。本文将解释如何使用包含所有异常的模块SQLite3从数据库中写入和获取大型数据。 一种简单的方法是执行查询并使用fetchall()。这已经在第1集中讨论过了。
- executescript() 这是一种同时执行多个SQL语句的方便方法。它执行作为参数获取的SQL脚本。
Syntax:sqlite3.connect.executescript(script)
import
sqlite3
# Connection with the DataBase
# 'library.db'
connection
=
sqlite3.connect(
"library.db"
)
cursor
=
connection.cursor()
# SQL piece of code Executed
# SQL piece of code Executed
cursor.executescript(
"""
CREATE TABLE people(
firstname,
lastname,
age
);
CREATE TABLE book(
title,
author,
published
);
INSERT INTO
book(title, author, published)
VALUES (
'Dan Clarke''s GFG Detective Agency',
'Sean Simpsons',
1987
);
"""
)
sql
=
"""
SELECT COUNT(*) FROM book;"""
cursor.execute(sql)
# The output in fetched and returned
# as a List by fetchall()
result
=
cursor.fetchall()
print
(result)
sql
=
"""
SELECT * FROM book;"""
cursor.execute(sql)
result
=
cursor.fetchall()
print
(result)
# Changes saved into database
connection.commit()
# Connection closed(broken)
# with DataBase
connection.close()
输出:
[(1,)] [("Dan Clarke's GFG Detective Agency", 'Sean Simpsons', 1987)]
注意:由于具有创建/写入数据库的权限,这段代码可能不适用于在线解释器。
- 执行官 通常情况下,必须从数据文件(对于更简单的事例列表、数组)将大量数据插入数据库。与每次写入数据库中的每一行代码相比,多次迭代代码是很简单的。但在这种情况下,使用loop并不合适,下面的示例说明了原因。下面解释ExecuteMay()的语法和用法,以及如何像循环一样使用它。
import
sqlite3
# Connection with the DataBase
# 'library.db'
connection
=
sqlite3.connect(
"library.db"
)
cursor
=
connection.cursor()
# SQL piece of code Executed
cursor.execute(
"""
CREATE TABLE book(
title,
author,
published);"""
)
List
=
[(
'A'
,
'B'
,
2008
), (
'C'
,
'D'
,
2008
),
(
'E'
,
'F'
,
2010
)]
connection. executemany(
"""
INSERT INTO
book(title, author, published)
VALUES (?, ?, ?)"""
,
List
)
sql
=
"""
SELECT * FROM book;"""
cursor.execute(sql)
result
=
cursor.fetchall()
for
x
in
result:
print
(x)
# Changes saved into database
connection.commit()
# Connection closed(broken)
# with DataBase
connection.close()
输出:
Traceback (most recent call last): File "C:/Users/GFG/Desktop/SQLITE3.py", line 16, in List[2][3] =[['A', 'B', 2008], ['C', 'D', 2008], ['E', 'F', 2010]] NameError: name 'List' is not defined
使用executemany()可以使代码正常工作。
import
sqlite3
# Connection with the DataBase
# 'library.db'
connection
=
sqlite3.connect(
"library.db"
)
cursor
=
connection.cursor()
# SQL piece of code Executed
cursor.execute(
"""
CREATE TABLE book(
title,
author,
published);"""
)
List
=
[(
'A'
,
'B'
,
2008
), (
'C'
,
'D'
,
2008
),
(
'E'
,
'F'
,
2010
)]
connection. executemany(
"""
INSERT INTO
book(title, author, published)
VALUES (?, ?, ?)"""
,
List
)
sql
=
"""
SELECT * FROM book;"""
cursor.execute(sql)
result
=
cursor.fetchall()
for
x
in
result:
print
(x)
# Changes saved into database
connection.commit()
# Connection closed(broken)
# with DataBase
connection.close()
输出:
('A', 'B', 2008) ('C', 'D', 2008) ('E', 'F', 2010)
- 获取大数据
import
sqlite3
# Connection created with the
# database using sqlite3.connect()
connection
=
sqlite3.connect(
"company.db"
)
cursor
=
connection.cursor()
# Create Table command executed
sql
=
"""
CREATE TABLE employee (
ID INTEGER PRIMARY KEY,
fname VARCHAR(20),
lname VARCHAR(30),
gender CHAR(1),
dob DATE);"""
cursor.execute(sql)
# Single Tuple inserted
sql
=
"""
INSERT INTO employee
VALUES (1007, "Will", "Olsen", "M", "24-SEP-1865");"""
cursor.execute(sql)
# Multiple Rows inserted
List
=
[(
1008
,
'Rkb'
,
'Boss'
,
'M'
,
"27-NOV-1864"
),
(
1098
,
'Sak'
,
'Rose'
,
'F'
,
"27-DEC-1864"
),
(
1908
,
'Royal'
,
'Bassen'
,
"F"
,
"17-NOV-1894"
)]
connection. executemany(
"INSERT INTO employee VALUES (?, ?, ?, ?, ?)"
,
List
)
print
(
"Method-1"
)
# Multiple Rows fetched from
# the Database
for
row
in
connection.execute(
'SELECT * FROM employee ORDER BY ID'
):
print
(row)
print
(
"Method-2"
)
# Method-2 to fetch multiple
# rows
sql
=
"""
SELECT * FROM employee ORDER BY ID;"""
cursor.execute(sql)
result
=
cursor.fetchall()
for
x
in
result:
print
(x)
connection.commit()
connection.close()
输出:
Method-1 (1007, 'Will', 'Olsen', 'M', '24-SEP-1865') (1008, 'Rkb', 'Boss', 'M', '27-NOV-1864') (1098, 'Sak', 'Rose', 'F', '27-DEC-1864') (1908, 'Royal', 'Bassen', 'F', '17-NOV-1894') Method-2 (1007, 'Will', 'Olsen', 'M', '24-SEP-1865') (1008, 'Rkb', 'Boss', 'M', '27-NOV-1864') (1098, 'Sak', 'Rose', 'F', '27-DEC-1864') (1908, 'Royal', 'Bassen', 'F', '17-NOV-1894')
注意:由于具有创建/写入数据库的权限,这段代码可能不适用于在线解释器。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END