Skip to content

bpo-44106: Improve sqlite3 example database contents #26027

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions Doc/includes/sqlite3/createdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@
con = sqlite3.connect(DB_FILE)
cur = con.cursor()
cur.execute("""
create table people
create table lang
(
name_last varchar(20),
age integer
name varchar(20),
first_appeared integer
)
""")

cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)")
cur.execute("insert into people (name_last, age) values ('Putin', 51)")
cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)")
cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)")

con.commit()

Expand Down
8 changes: 4 additions & 4 deletions Doc/includes/sqlite3/ctx_manager.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import sqlite3

con = sqlite3.connect(":memory:")
con.execute("create table person (id integer primary key, firstname varchar unique)")
con.execute("create table lang (id integer primary key, name varchar unique)")

# Successful, con.commit() is called automatically afterwards
with con:
con.execute("insert into person(firstname) values (?)", ("Joe",))
con.execute("insert into lang(name) values (?)", ("Python",))

# con.rollback() is called after the with block finishes with an exception, the
# exception is still raised and must be caught
try:
with con:
con.execute("insert into person(firstname) values (?)", ("Joe",))
con.execute("insert into lang(name) values (?)", ("Python",))
except sqlite3.IntegrityError:
print("couldn't add Joe twice")
print("couldn't add Python twice")

# Connection object used as context manager only commits or rollbacks transactions,
# so the connection object should be closed manually
Expand Down
10 changes: 5 additions & 5 deletions Doc/includes/sqlite3/execsql_fetchonerow.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
con = sqlite3.connect("mydb")

cur = con.cursor()
SELECT = "select name_last, age from people order by age, name_last"
SELECT = "select name, first_appeared from people order by first_appeared, name"

# 1. Iterate over the rows available from the cursor, unpacking the
# resulting sequences to yield their elements (name_last, age):
# resulting sequences to yield their elements (name, first_appeared):
cur.execute(SELECT)
for (name_last, age) in cur:
print('%s is %d years old.' % (name_last, age))
for name, first_appeared in cur:
print(f"The {name} programming language appeared in {first_appeared}.")

# 2. Equivalently:
cur.execute(SELECT)
for row in cur:
print('%s is %d years old.' % (row[0], row[1]))
print(f"The {row[0]} programming language appeared in {row[1]}.")

con.close()
2 changes: 1 addition & 1 deletion Doc/includes/sqlite3/execsql_printall_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
cur = con.cursor()

# Execute the SELECT statement:
cur.execute("select * from people order by age")
cur.execute("select * from lang order by first_appeared")

# Retrieve all rows as a sequence and print that sequence:
print(cur.fetchall())
Expand Down
13 changes: 6 additions & 7 deletions Doc/includes/sqlite3/execute_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@

con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("create table lang (lang_name, lang_age)")
cur.execute("create table lang (name, first_appeared)")

# This is the qmark style:
cur.execute("insert into lang values (?, ?)", ("C", 49))
cur.execute("insert into lang values (?, ?)", ("C", 1972))

# The qmark style used with executemany():
lang_list = [
("Fortran", 64),
("Python", 30),
("Go", 11),
("Fortran", 1957),
("Python", 1991),
("Go", 2009),
]
cur.executemany("insert into lang values (?, ?)", lang_list)

# And this is the named style:
cur.execute("select * from lang where lang_name=:name and lang_age=:age",
{"name": "C", "age": 49})
cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
print(cur.fetchall())

con.close()
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

cur = con.cursor()

newPeople = (
('Lebed' , 53),
('Zhirinovsky' , 57),
)
languages = (
("Smalltalk", 1972),
("Swift", 2014),
)

for person in newPeople:
cur.execute("insert into people (name_last, age) values (?, ?)", person)
for lang in languages:
cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang)

# The changes will not be saved unless the transaction is committed explicitly:
con.commit()
Expand Down
16 changes: 8 additions & 8 deletions Doc/includes/sqlite3/shortcut_methods.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import sqlite3

persons = [
("Hugo", "Boss"),
("Calvin", "Klein")
]
langs = [
("C++", 1985),
("Objective-C", 1984),
]

con = sqlite3.connect(":memory:")

# Create the table
con.execute("create table person(firstname, lastname)")
con.execute("create table lang(name, first_appeared)")

# Fill the table
con.executemany("insert into person(firstname, lastname) values (?, ?)", persons)
con.executemany("insert into lang(name, first_appeared) values (?, ?)", langs)

# Print the table contents
for row in con.execute("select firstname, lastname from person"):
for row in con.execute("select name, first_appeared from lang"):
print(row)

print("I just deleted", con.execute("delete from person").rowcount, "rows")
print("I just deleted", con.execute("delete from lang").rowcount, "rows")

# close is not a shortcut method and it's not called automatically,
# so the connection object should be closed manually
Expand Down
5 changes: 1 addition & 4 deletions Doc/includes/sqlite3/simple_tableprinter.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import sqlite3

FIELD_MAX_WIDTH = 20
TABLE_NAME = 'people'
SELECT = 'select * from %s order by age, name_last' % TABLE_NAME

con = sqlite3.connect("mydb")

cur = con.cursor()
cur.execute(SELECT)
cur.execute("select * from lang order by name, first_appeared")

# Print a header.
for fieldDesc in cur.description:
Expand Down
3 changes: 1 addition & 2 deletions Doc/tools/susp-ignored.csv
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,7 @@ library/smtplib,,:port,method must support that as well as a regular host:port
library/socket,,::,'5aef:2b::8'
library/socket,,:can,"return (can_id, can_dlc, data[:can_dlc])"
library/socket,,:len,fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
library/sqlite3,,:name,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age"","
library/sqlite3,,:age,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age"","
library/sqlite3,,:year,"cur.execute(""select * from lang where first_appeared=:year"", {""year"": 1972})"
library/sqlite3,,:memory,
library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)"
library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group"
Expand Down