Módulo SQLite3 do Python

O módulo sqlite3 permite usar bancos de dados SQLite diretamente do Python, sem um servidor de banco de dados separado.

import sqlite3

SQLite é uma boa escolha para apps pequenos, ferramentas locais, testes e aprendizado de SQL. O banco pode ficar em um único arquivo ou apenas na memória com ':memory:'.

Conectando a um banco de dados

SQLite pode criar o arquivo do banco automaticamente se ele não existir.

import sqlite3

connection = sqlite3.connect(':memory:')
print(type(connection).__name__)
Connection

Criando uma tabela e inserindo linhas

import sqlite3

connection = sqlite3.connect(':memory:')
cursor = connection.cursor()

cursor.execute('CREATE TABLE users (name TEXT, age INTEGER)')
cursor.execute('INSERT INTO users VALUES (?, ?)', ('Ada', 36))
cursor.execute('INSERT INTO users VALUES (?, ?)', ('Grace', 40))
connection.commit()

Use placeholders em vez de montar strings SQL manualmente.

WARNING

Não construa consultas SQL concatenando entrada do usuário. Use placeholders como ? para evitar problemas de SQL injection.

Consultando linhas

rows = cursor.execute('SELECT name, age FROM users ORDER BY age').fetchall()
print(rows)
[('Ada', 36), ('Grace', 40)]

Usando objetos Row

Row permite acessar colunas pelo nome.

connection = sqlite3.connect(':memory:')
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
cursor.execute('CREATE TABLE projects (name TEXT)')
cursor.execute('INSERT INTO projects VALUES (?)', ('python-cheatsheet',))
row = cursor.execute('SELECT name FROM projects').fetchone()
print(row['name'])
python-cheatsheet

Usando um gerenciador de contexto

A conexão pode ser usada com with, então as mudanças são confirmadas automaticamente se não houver erro.

import sqlite3

with sqlite3.connect(':memory:') as connection:
    connection.execute('CREATE TABLE notes (body TEXT)')
    connection.execute('INSERT INTO notes VALUES (?)', ('Learn sqlite3',))
    rows = connection.execute('SELECT body FROM notes').fetchall()

print(rows)
[('Learn sqlite3',)]