Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/b#in/env python
- # -*- coding: utf-8 -*-
- #
- '''
- SQL lenguaje de consultas estructuras
- paradigma declarativo
- crear una base de datos llamada prueba:
- CREATE DATABASE estacionMetereologica;
- quiero ver todos los registros de una tabla Clima_DIA
- SELECT * FROM Clima_DIA
- motor de base de datos:
- MySQL, MariaDB, PostgreSQL, SQLite --> soft libre
- SQL Server, Oracle --> soft propio
- DB-API: API estandar de Python
- MySQL: mysql-connector-python, PyMySQL, MySQLdb
- PostgreSQL psycopg, pg8000
- SQLite: sqlite3 (ya viene instalada)
- SQL Server: pymssql, pyodbc
- Oracle: cx_Oracle
- """
- # el mismo ejemplo para MYSQL
- # previamente instalar python -m pip install pymysql
- """
- import pymysql
- # se conecta a la base
- conn = pymysql.connect(
- host='localhost',
- user='usuario',
- passwd='password',
- db='mi_base.db')
- # para hacer una consulta SDL necesito un cursor
- cursor = conn.cursor()
- # puedo ejecutar una consulta SQL: crear una tabla
- cursor.execute("CREATE TABLE IF NOT EXISTS personas(nombre VARCHAR(45), edad INT)")
- # como modifique la base debo "guardar los datos"
- conn.commit()
- # creo una tupla de datos
- datos = (
- ("Juan",30),
- ("Luis",11),
- ("Vicky",25),
- )
- for nombre, edad in datos:
- cursor.execute("INSERT INTO personas VALUES(%s,%s?)",(nombre,edad))
- conn.commit()
- # quiero imprimir
- cursor.execute("SELECT * FROM personas")
- personas = cursor.fetchall()
- print(personas)
- # cierro la conexion
- conn.close()
- '''
- # SQL Injection
- # >> Ingrese un nombre: Alejandro',22); DELETE FROM personas; --
- # >> Ingrese la edad: 30
- # INSERT INTO personas VALUES('Alejandro',22); DELETE FROM personas; --,30)
- import sqlite3
- conn = sqlite3.connect("mi_base.sqlite")
- cursor = conn.cursor()
- nombre = input("Ingrese un nombre: ")
- edad = int(input("Ingrese la edad: "))
- # condición correcta (resiste SQL Injection)
- # cursor.execute("INSERT INTO personas VALUES(?,?)",(nombre,edad))
- # condición peligrosa: si están habilitados los warnings resiste, si no, NO
- # lanza
- # sqlite3.Warning: You can only execute one statement at a time.
- # no da error, dice que solo ejecuta una instrucción a la vez
- # cursor.execute(f"INSERT INTO personas VALUES('{nombre}',{edad})")
- # condicion LETAL: borra la tabla
- cursor.executescript(f"INSERT INTO personas VALUES('{nombre}',{edad})")
- conn.commit()
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment