Автоматизирането на бекенд процеси във вашия екземпляр на SQL Server е често срещана задача. Независимо дали става дума за опресняване на статистиката, възстановяване на индекси, четене или изтриване на данни, е изключително ценно да интегрирате други програмни рамки с вашата RDBMS. Тази статия ще разгледа тези типове задачи, специално интегрирани с Python.
Няма да се фокусираме върху такива фундаментални въпроси, като какво е SQL и Python или как и къде ги използваме. Вместо това ще разгледаме конкретните случаи, които изискват комбиниране на SQL и Python, както и различни налични модули за методи за това.
SQL Server Connection String
Преди да започнем да изследваме случая на свързване на Python към SQL сървър, нека се запознаем с основите.
Низът за свързване представлява необходимите части от данни, които сочат и удостоверяват вашия екземпляр на базата данни. Може да има леки нюанси за всеки тип екземпляр на база данни, но като цяло необходимата информация би била името на сървъра, драйверът на базата данни, потребителското име, паролата и номерът на порта.
Подробности за екземпляра на SQL сървър
Подробностите за този низ за връзка ще бъдат същите, както когато се свържете чрез SSMS към екземпляра на базата данни. Обърнете внимание на екземпляра на базата данни {SERVER}\{INSTANCE} формат – ето го DESKTOP-6L1B155\FogelDev . Възможно е също да се свържете с име на сървър, ако имате работещ само един екземпляр по подразбиране.
Код за създаване на база данни на SQL сървър и таблица
Първо, имаме нужда от база данни със структура на таблицата, необходима за работа с Python и SQL Server. Следващият скрипт ще създаде такава база данни и една таблица в нея. Тази таблица ще служи като демонстрационна област, за да видим как да използваме SQL и Python заедно.
CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)
INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')
INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')
INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')
Модули на Python
Нашата цел сега е да дефинираме как да свързваме Python към екземпляри на SQL сървър. За изпълнение на тази задача са налични множество модули на Python, като два от тях са основни. Ще се справим сPYODC иSQLAlchemy . Тези модули обработват свързващата част от операциите.
Необходим е допълнителен код за четене на данните от таблици на SQL Server в паметта. Това е мястото на Пандите библиотеката влиза.
Панди може да се интегрира тясно сSQLALchemy за да прочетете данните направо в DataFrame обекти (в памет, базирана на памет, която може да работи със светкавична скорост и да изглежда точно като таблици от база данни).
Нека да разгледаме няколко примера за низове за свързване.
Първият пример използва SQL Server и екземпляр от предишната екранна снимка. Можете да зададете тези променливи във вашите специфични данни, за да инстанцирате връзка.
Имайте предвид също, че тази конкретна връзка използва удостоверяване на Windows. Следователно, той ще се опита да се удостовери като потребител от моята Windows машина, в която съм влязъл. Ако не са посочени потребителско име и парола, това е поведението по подразбиране в низа за връзка.
- Име на сървъра =„ДЕСКТОП-6L1B155“
- Име на екземпляр =„FogelDev“
- Име на база данни =„CODESIGHT_DEMOS“
- Номер на порт =„1433“
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
Можем да проверим дали тази връзка работи правилно, като изпълним заявка с Pandas. Той трябва да прочете заявка от низа за връзка с помощта на read_sql_query команда.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
Удостоверяване на SQL сървър
Ами ако трябва да използвате низа за връзка, базиран на удостоверяване на SQL сървър, за да се свържете с вашия SQL Server? Можем да коригираме нашия Python код, за да добавим потребителско име и парола към SQLALchemy двигател.
- Име на сървъра =‘DESKTOP-6L1B155’
- Име на екземпляр =‘FogelDev’
- Име на база данни =„CODESIGHT_DEMOS“
- Номер на порт =„1433“
- Потребителско име =‘CodingSightUser’
- Парола =„Парола123“
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
Отново тестваме връзката си, но този път избираме само 1 запис от таблицата.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
Записване на данни
И накрая, вижте как да получите данните на Python в нашата таблица с база данни на SQL Server. Създаваме обект Dataframe и го добавяме към таблицата.
Методът Dataframe:
newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)
Друг метод би бил вмъкването на данните директно в таблицата с командата execute.
Методът Execute:
MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");
Когато приключите, финалната маса изглежда по следния начин. Той има първите 3 реда, заредени от първоначалния скрипт за създаване на SQL Server, а 4 и 5 реда се зареждат от Python.
Резюме
Тази публикация подчерта параметрите на низа за свързване за свързване на Python кода със SQL Server. Разгледахме четенето на данните от SQL Server и проверихме два различни метода за удостоверяване – специфичният случай на Python свързване към SQL сървър Windows удостоверяване и стандартното удостоверяване на SQL сървър. Също така прегледахме методите за зареждане на данни, един от които включва използване на обект DataFrame в Python, а друг е необработена SQL команда INSERT.