bpo-44106: Improve sqlite3 example database contents (GH-26027)

This commit is contained in:
Erlend Egeberg Aasland 2021-05-19 09:41:19 +02:00 committed by GitHub
parent 9014437573
commit 92d1064727
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 37 additions and 42 deletions

View File

@ -12,15 +12,15 @@ if os.path.exists(DB_FILE):
con = sqlite3.connect(DB_FILE) con = sqlite3.connect(DB_FILE)
cur = con.cursor() cur = con.cursor()
cur.execute(""" cur.execute("""
create table people create table lang
( (
name_last varchar(20), name varchar(20),
age integer first_appeared integer
) )
""") """)
cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)") cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)")
cur.execute("insert into people (name_last, age) values ('Putin', 51)") cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)")
con.commit() con.commit()

View File

@ -1,19 +1,19 @@
import sqlite3 import sqlite3
con = sqlite3.connect(":memory:") 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 # Successful, con.commit() is called automatically afterwards
with con: 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 # con.rollback() is called after the with block finishes with an exception, the
# exception is still raised and must be caught # exception is still raised and must be caught
try: try:
with con: with con:
con.execute("insert into person(firstname) values (?)", ("Joe",)) con.execute("insert into lang(name) values (?)", ("Python",))
except sqlite3.IntegrityError: 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, # Connection object used as context manager only commits or rollbacks transactions,
# so the connection object should be closed manually # so the connection object should be closed manually

View File

@ -3,17 +3,17 @@ import sqlite3
con = sqlite3.connect("mydb") con = sqlite3.connect("mydb")
cur = con.cursor() 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 # 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) cur.execute(SELECT)
for (name_last, age) in cur: for name, first_appeared in cur:
print('%s is %d years old.' % (name_last, age)) print(f"The {name} programming language appeared in {first_appeared}.")
# 2. Equivalently: # 2. Equivalently:
cur.execute(SELECT) cur.execute(SELECT)
for row in cur: 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() con.close()

View File

@ -7,7 +7,7 @@ con = sqlite3.connect("mydb")
cur = con.cursor() cur = con.cursor()
# Execute the SELECT statement: # 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: # Retrieve all rows as a sequence and print that sequence:
print(cur.fetchall()) print(cur.fetchall())

View File

@ -2,22 +2,21 @@ import sqlite3
con = sqlite3.connect(":memory:") con = sqlite3.connect(":memory:")
cur = con.cursor() 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: # 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(): # The qmark style used with executemany():
lang_list = [ lang_list = [
("Fortran", 64), ("Fortran", 1957),
("Python", 30), ("Python", 1991),
("Go", 11), ("Go", 2009),
] ]
cur.executemany("insert into lang values (?, ?)", lang_list) cur.executemany("insert into lang values (?, ?)", lang_list)
# And this is the named style: # And this is the named style:
cur.execute("select * from lang where lang_name=:name and lang_age=:age", cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
{"name": "C", "age": 49})
print(cur.fetchall()) print(cur.fetchall())
con.close() con.close()

View File

@ -4,13 +4,13 @@ con = sqlite3.connect("mydb")
cur = con.cursor() cur = con.cursor()
newPeople = ( languages = (
('Lebed' , 53), ("Smalltalk", 1972),
('Zhirinovsky' , 57), ("Swift", 2014),
) )
for person in newPeople: for lang in languages:
cur.execute("insert into people (name_last, age) values (?, ?)", person) cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang)
# The changes will not be saved unless the transaction is committed explicitly: # The changes will not be saved unless the transaction is committed explicitly:
con.commit() con.commit()

View File

@ -1,23 +1,23 @@
import sqlite3 import sqlite3
persons = [ langs = [
("Hugo", "Boss"), ("C++", 1985),
("Calvin", "Klein") ("Objective-C", 1984),
] ]
con = sqlite3.connect(":memory:") con = sqlite3.connect(":memory:")
# Create the table # Create the table
con.execute("create table person(firstname, lastname)") con.execute("create table lang(name, first_appeared)")
# Fill the table # 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 # 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(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, # close is not a shortcut method and it's not called automatically,
# so the connection object should be closed manually # so the connection object should be closed manually

View File

@ -1,13 +1,10 @@
import sqlite3 import sqlite3
FIELD_MAX_WIDTH = 20 FIELD_MAX_WIDTH = 20
TABLE_NAME = 'people'
SELECT = 'select * from %s order by age, name_last' % TABLE_NAME
con = sqlite3.connect("mydb") con = sqlite3.connect("mydb")
cur = con.cursor() cur = con.cursor()
cur.execute(SELECT) cur.execute("select * from lang order by name, first_appeared")
# Print a header. # Print a header.
for fieldDesc in cur.description: for fieldDesc in cur.description:

View File

@ -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,,::,'5aef:2b::8'
library/socket,,:can,"return (can_id, can_dlc, data[:can_dlc])" 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/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,,:year,"cur.execute(""select * from lang where first_appeared=:year"", {""year"": 1972})"
library/sqlite3,,:age,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age"","
library/sqlite3,,:memory, library/sqlite3,,:memory,
library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)"
library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group"

1 c-api/arg :ref PyArg_ParseTuple(args, "O|O:ref", &object, &callback)
209 library/socket :: '5aef:2b::8'
210 library/socket :can return (can_id, can_dlc, data[:can_dlc])
211 library/socket :len fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
212 library/sqlite3 :name :year cur.execute("select * from lang where lang_name=:name and lang_age=:age", cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
library/sqlite3 :age cur.execute("select * from lang where lang_name=:name and lang_age=:age",
213 library/sqlite3 :memory
214 library/sqlite3 :path db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)
215 library/ssl :My Organizational Unit Name (eg, section) []:My Group