Language Translator | Python

Pyodbc Database Connection and Query Execution

This code demonstrates how to connect to a database using pyodbc library, execute a parameterized SQL query, handle errors, and perform testing with different input values.


Empty image or helper icon

This Query related with thread "Guidelines for Working with Dynamic SQL Queries"

Prompt

-- Use parameterized query and input validation
DECLARE @inputValue NVARCHAR(50);
SET @inputValue = 'Robert''; DROP TABLE Student;--';

DECLARE @sqlQuery NVARCHAR(MAX);
SET @sqlQuery = N'SELECT * FROM Students WHERE Name = @name';

-- Execute dynamic SQL with parameterized query
EXEC sp_executesql @sqlQuery, N'@name NVARCHAR(50)', @name = @inputValue;

-- Error handling
BEGIN TRY
    EXEC sp_executesql @sqlQuery, N'@name NVARCHAR(50)', @name = @inputValue;
END TRY
BEGIN CATCH
    -- Log and handle the error
    SELECT ERROR_NUMBER(), ERROR_MESSAGE(), GETDATE();
END CATCH

-- Perform testing with different input values and edge cases
DECLARE @parameterValue NVARCHAR(50);
SET @parameterValue = 'John';

SET @sqlQuery = N'SELECT * FROM Students WHERE Name = @name';

EXEC sp_executesql @sqlQuery, N'@name NVARCHAR(50)', @name = @parameterValue;

Answer

import pyodbc

# Set the input value
input_value = "Robert'; DROP TABLE Student;--"

# Define the SQL query with parameter
sql_query = "SELECT * FROM Students WHERE Name = ?"

# Create a connection to the database
conn = pyodbc.connect("DRIVER={SQL Server};SERVER=server_name;DATABASE=db_name;UID=username;PWD=password")

# Execute the parameterized query with input value
execute_query = conn.execute(sql_query, input_value)

# Fetch the results
results = execute_query.fetchall()

# Print the results
for row in results:
    print(row)

# Error handling
try:
    # Execute the parameterized query with input value
    execute_query = conn.execute(sql_query, input_value)

    # Fetch the results
    results = execute_query.fetchall()

    # Print the results
    for row in results:
        print(row)

except Exception as e:
    # Log and handle the error
    error_number = e.args[0]
    error_message = e.args[1]
    current_date = datetime.datetime.now()

    print(error_number, error_message, current_date)

# Perform testing with different input values and edge cases
parameter_value = "John"

# Execute the parameterized query with parameter value
execute_query = conn.execute(sql_query, parameter_value)

# Fetch the results
results = execute_query.fetchall()

# Print the results
for row in results:
    print(row)

# Close the connection
conn.close()

Main Points:

  • Imported pyodbc library for database connection
  • Set the input value and SQL query with parameter
  • Created a connection to the database using pyodbc.connect()
  • Executed the parameterized query using conn.execute() method
  • Fetched and printed the results
  • Performed error handling using try-except block
  • Logged and handled the error by accessing the error details from the exception object
  • Performed testing with different input values and edge cases by executing the parameterized query with another parameter value
  • Closed the database connection using conn.close() method.

Create your Thread using our flexible tools, share it with friends and colleagues.

Your current query will become the main foundation for the thread, which you can expand with other tools presented on our platform. We will help you choose tools so that your thread is structured and logically built.

Description

This code demonstrates how to connect to a database using the pyodbc library in Python. It starts by setting an input value and defining an SQL query with a parameter. A connection to the database is established using the pyodbc.connect() method. The parameterized query is then executed using the conn.execute() method, and the results are fetched and printed. The code also includes error handling using a try-except block. Any exceptions that occur are logged and handled by accessing the error details from the exception object. The code also performs testing with different input values and edge cases by executing the parameterized query with another parameter value. Finally, the database connection is closed using the conn.close() method.