# Close connection conn.close()
class DatabaseManager: def (self, db_name='my_database.db'): self.db_name = db_name self.create_tables()
print(row)
cursor.execute("UPDATE users SET age = age + 1 WHERE age < 30") cursor.execute("DELETE FROM users WHERE age > 100") sqlite3 tutorial query python fixed
# NEVER DO THIS - SQL Injection vulnerable! # cursor.execute(f"SELECT * FROM users WHERE username = 'username'")
def update_user_age(username, new_age): cursor.execute(''' UPDATE users SET age = ? WHERE username = ? ''', (new_age, username)) conn.commit() return cursor.rowcount # Number of rows affected
def query_as_dict(): conn = sqlite3.connect('my_database.db') conn.row_factory = sqlite3.Row # Enable dictionary-like access cursor = conn.cursor() cursor.execute("SELECT * FROM users LIMIT 5") rows = cursor.fetchall() # Close connection conn
class TestDatabaseQueries(unittest.TestCase):
Output:
cursor.execute('SELECT name, email FROM users') rows = cursor.fetchall() ''', (new_age, username)) conn
conn = sqlite3.connect("app.db") # Fix output format to act like a dictionary conn.row_factory = sqlite3.Row cursor = conn.cursor() cursor.execute("SELECT * FROM users") rows = cursor.fetchall() for row in rows: # Now you can access columns by their database headers! print(f"User: row['name'], Email: row['email']") Use code with caution. 5. Batch Executions: Fixing Loop Inefficiencies
import unittest