kind of done. there is a mssql ML session, but not relevant right now
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import pyodbc
|
||||
|
||||
try:
|
||||
connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=.;DATABASE=SampleDB;Trusted_Connection=yes')
|
||||
cursor = connection.cursor()
|
||||
|
||||
create_table="""
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbl_customers_from_csv_bulk_insert]') AND type in (N'U'))
|
||||
begin
|
||||
create table [dbo].[tbl_customers_from_csv_bulk_insert](
|
||||
id int not null,
|
||||
code varchar(50) null,
|
||||
first_name varchar(50) null,
|
||||
last_name varchar(50) null,
|
||||
)
|
||||
end;
|
||||
"""
|
||||
cursor.execute(create_table)
|
||||
connection.commit()
|
||||
|
||||
bulk_insert_cmd="""
|
||||
bulk insert tbl_customers_from_csv_bulk_insert
|
||||
from 'C:\\Users\\bl.SEV\\repos\\python-mssql\\advanced-topics\\csv\\sample-csv-file-for-bulk-insert-demo.csv'
|
||||
with
|
||||
(
|
||||
fieldterminator = ';',
|
||||
rowterminator = '\n'
|
||||
);
|
||||
"""
|
||||
cursor.execute(bulk_insert_cmd)
|
||||
connection.commit()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
except pyodbc.Error as ex:
|
||||
print()
|
||||
print("exception: ",ex)
|
||||
cursor.close()
|
||||
connection.close()
|
||||
print()
|
||||
exit()
|
||||
@@ -0,0 +1,41 @@
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
sql_instance = "."
|
||||
sql_database = "master"
|
||||
folder_to_check = "./sql_scripts/"
|
||||
|
||||
def run_ps_command(cmd):
|
||||
# Build the PowerShell invocation list
|
||||
command = [
|
||||
"PowerShell",
|
||||
"-ExecutionPolicy", "Unrestricted",
|
||||
"-Command", cmd
|
||||
]
|
||||
|
||||
result = subprocess.run(
|
||||
command,
|
||||
capture_output=True,
|
||||
text=True
|
||||
)
|
||||
return result
|
||||
|
||||
for file in os.listdir(folder_to_check):
|
||||
if file.endswith(".sql"):
|
||||
full_path = os.path.join(folder_to_check, file)
|
||||
print(f"executing .sql file: {full_path}")
|
||||
|
||||
sql_command = (
|
||||
f"Invoke-Sqlcmd -ServerInstance {sql_instance} "
|
||||
f"-Database {sql_database} -InputFile \"{full_path}\""
|
||||
)
|
||||
|
||||
result = run_ps_command(sql_command)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("Error executing script:")
|
||||
print(result.stderr.strip())
|
||||
else:
|
||||
if result.stdout:
|
||||
print("Output:")
|
||||
print(result.stdout.strip())
|
||||
@@ -1,13 +1,28 @@
|
||||
import tkinter
|
||||
import pyodbc
|
||||
import csv
|
||||
|
||||
sql_server_ver = "Not Available"
|
||||
|
||||
root = tkinter.Tk()
|
||||
root.geometry("600x400")
|
||||
root.title("Sample Python GUI App")
|
||||
|
||||
label_hello_world = tkinter.Label(root, text=str(sql_server_ver), fg="red")
|
||||
|
||||
def sql_server_version():
|
||||
|
||||
try:
|
||||
connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=.;DATABASE=SampleDB;Trusted_Connection=yes')
|
||||
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("select @@VERSION as version")
|
||||
|
||||
|
||||
while 1:
|
||||
row = cursor.fetchone()
|
||||
if not row:
|
||||
break
|
||||
sql_server_ver = row.version
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
@@ -20,4 +35,11 @@ except pyodbc.Error as ex:
|
||||
print()
|
||||
exit()
|
||||
|
||||
print()
|
||||
label_hello_world.config(text=str(sql_server_ver))
|
||||
label_hello_world.pack()
|
||||
|
||||
btn_sql_server_version = tkinter.Button(root, command=sql_server_version, text="Retrieve SQL Server Version")
|
||||
btn_sql_server_version.pack(side=tkinter.TOP, pady=50)
|
||||
|
||||
|
||||
root.mainloop()
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
1;customer1;fistName1;lastName1
|
||||
2;customer2;fistName2;lastName2
|
||||
3;customer3;fistName3;lastName3
|
||||
4;customer4;fistName4;lastName4
|
||||
5;customer5;fistName5;lastName5
|
||||
|
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Created for the online course on Udemy: "Working with Python® on Windows® and SQL Server® Databases"
|
||||
*
|
||||
* Course URL:
|
||||
* https://www.udemy.com/course/python-windows-sql-server
|
||||
*
|
||||
* Author/Instructor: Artemakis Artemiou
|
||||
*
|
||||
* Disclaimer: This SQL script which is part of the online course on Udemy "Working with Python® on Windows®
|
||||
* and SQL Server® Databasess", is intended to be used only for demo purposes. Do not
|
||||
* use it for Production systems as it is simplified for demo purposes.
|
||||
*/
|
||||
|
||||
create database SampleDB2022_1a;
|
||||
go
|
||||
|
||||
use SampleDB2022_1a;
|
||||
go
|
||||
|
||||
create table tblSample1a(
|
||||
id int,
|
||||
code varchar(50));
|
||||
go
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Created for the online course on Udemy: "Working with Python® on Windows® and SQL Server® Databases"
|
||||
*
|
||||
* Course URL:
|
||||
* https://www.udemy.com/course/python-windows-sql-server
|
||||
*
|
||||
* Author/Instructor: Artemakis Artemiou
|
||||
*
|
||||
* Disclaimer: This SQL script which is part of the online course on Udemy "Working with Python® on Windows®
|
||||
* and SQL Server® Databasess", is intended to be used only for demo purposes. Do not
|
||||
* use it for Production systems as it is simplified for demo purposes.
|
||||
*/
|
||||
|
||||
use SampleDB2022_1a;
|
||||
go
|
||||
|
||||
insert into tblSample1a
|
||||
values (1,'test1'), (2,'test2');
|
||||
|
||||
create table tblSample1b(
|
||||
id int,
|
||||
code varchar(50));
|
||||
go
|
||||
|
||||
insert into tblSample1b
|
||||
values (1,'test1'), (2,'test2');
|
||||
go
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Created for the online course on Udemy: "Working with Python® on Windows® and SQL Server® Databases"
|
||||
*
|
||||
* Course URL:
|
||||
* https://www.udemy.com/course/python-windows-sql-server
|
||||
*
|
||||
* Author/Instructor: Artemakis Artemiou
|
||||
*
|
||||
* Disclaimer: This SQL script which is part of the online course on Udemy "Working with Python® on Windows®
|
||||
* and SQL Server® Databasess", is intended to be used only for demo purposes. Do not
|
||||
* use it for Production systems as it is simplified for demo purposes.
|
||||
*/
|
||||
|
||||
create database SampleDB2022_1b;
|
||||
go
|
||||
|
||||
use SampleDB2022_1b;
|
||||
go
|
||||
|
||||
create table tblSample1a(
|
||||
id int,
|
||||
code varchar(50));
|
||||
|
||||
create table tblSample1b(
|
||||
id int,
|
||||
code varchar(50));
|
||||
go
|
||||
@@ -1 +1,4 @@
|
||||
pyodbc
|
||||
langchain
|
||||
langchain-mcp-adapters
|
||||
aiohttp
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
------------------------------------------------------
|
||||
-- 1. Solutions to common issues
|
||||
------------------------------------------------------
|
||||
-- Resolving the "Divide by zero" error (by example)
|
||||
DECLARE @denominator INT
|
||||
SET @denominator = 0
|
||||
--SELECT 1 / 0
|
||||
SELECT 1 / ISNULL(NULLIF(@denominator, 0), 1)
|
||||
------------------------------------------------------
|
||||
--Handling the error “The conversion of a char data type to a datetime data
|
||||
--type resulted in an out-of-range datetime value”
|
||||
--Change the default language to “us_english” for the given SQL Server login:
|
||||
USE [master];
|
||||
ALTER LOGIN "LOGIN_NAME" WITH DEFAULT_LANGUAGE = us_english;
|
||||
--Best practice: Always use the ISO date format in your data applications/T-SQL scripts: YYYY-MM-DD
|
||||
------------------------------------------------------
|
||||
--Handling the error “Database [Database_Name] cannot be upgraded because it is read-only
|
||||
--or has read-only files”
|
||||
--Make sure that the user account on which the SQL Server instance database engine is
|
||||
--running has full access to the database files.
|
||||
------------------------------------------------------
|
||||
-- 2. Basic String Functions
|
||||
------------------------------------------------------
|
||||
-- Returns @length characters from @expression starting from @start_index
|
||||
SELECT SUBSTRING(@expression, @start_index, @length)
|
||||
SELECT SUBSTRING('This is a Test', 1, 4)
|
||||
-- Finds the given @pattern in the @string and replaces it with the @replacement_string
|
||||
SELECT REPLACE(@string, @pattern, @replacement_string)
|
||||
SELECT REPLACE('This is a Test', 'Test', 'New Test')
|
||||
-- Returns the size of @string in terms of number of characters
|
||||
SELECT LEN(@string)
|
||||
SELECT LEN('This is a Test')
|
||||
-- Returns the first @num_chars characters of the @string counting from the left
|
||||
SELECT LEFT(@string, @num_chars)
|
||||
SELECT LEFT('This is a Test',4)
|
||||
-- Returns the first @num_chars characters of the @string counting from the right
|
||||
SELECT RIGHT(@string, @num_chars)
|
||||
SELECT RIGHT('This is a Test',4)
|
||||
-- Removes the leading blank spaces
|
||||
SELECT LTRIM(@expression)
|
||||
SELECT LTRIM(' This is a Test')
|
||||
-- Removes the trailing blank spaces
|
||||
SELECT RTRIM(@expression)
|
||||
SELECT RTRIM('This is a Test ')
|
||||
------------------------------------------------------
|
||||
-- 3. Performance-Related Tips
|
||||
------------------------------------------------------
|
||||
-- Avoiding locking when reading data (however, dirty reads are allowed)
|
||||
-- You need to take into consideration, possible dirty-read issues when using this approach
|
||||
SELECT [columnName]
|
||||
FROM [tableName] WITH (NOLOCK)
|
||||
------------------------------------------------------
|
||||
-- Rebuild a specific index with using parameters
|
||||
USE [DATABASE_NAME];
|
||||
ALTER INDEX [INDEX_NAME] ON [SCHEMA.TABLE]
|
||||
REBUILD WITH (FILLFACTOR=[FILL_FACTOR_VALUE_BETWEEN_0_100], ONLINE=[ON|OFF]);
|
||||
-- Rebuild all indexes in a table with using parameters
|
||||
USE [DATABASE_NAME];
|
||||
ALTER INDEX ALL ON [SCHEMA.TABLE]
|
||||
REBUILD WITH (FILLFACTOR=[FILL_FACTOR_VALUE_BETWEEN_0_100], ONLINE=[ON|OFF]);
|
||||
------------------------------------------------------
|
||||
-- Updating database tables without causing blocking
|
||||
-- You need to take into consideration, possible dirty-read issues when using this approach
|
||||
UPDATE [TABLE_NAME] WITH (READPAST)
|
||||
SET …
|
||||
WHERE …
|
||||
------------------------------------------------------
|
||||
-- 4. Maintenance-Related Tips
|
||||
------------------------------------------------------
|
||||
-- Truncating a data/log file
|
||||
USE [DBName];
|
||||
DBCC SHRINKFILE ([Data_Log_LogicalName],TRUNCATEONLY);
|
||||
-- Renaming a Windows login
|
||||
ALTER LOGIN "[Domain or Server Name]\[Windows Username]"
|
||||
WITH NAME="[New Domain or New Server Name]\[Windows Username]";
|
||||
-- Renaming a SQL Server login
|
||||
ALTER LOGIN "[SQL Server Login Name]"
|
||||
WITH NAME="[New SQL Server Login Name]";
|
||||
-- Creating Logins for orphaned SQL Server users
|
||||
USE [DBName];
|
||||
EXEC sp_change_users_login 'Auto_Fix', '[UserName]', NULL, '[Password]';
|
||||
-- Changing the Database Owner in a SQL Server Database (SQL Login)
|
||||
USE [DBName];
|
||||
EXEC sp_changedbowner '[SQL_Login_Name]';
|
||||
-- Changing the Database Owner in a SQL Server Database (Windows Login)
|
||||
USE [DBName];
|
||||
EXEC sp_changedbowner '[DomainNameUserName]'
|
||||
Reference in New Issue
Block a user