Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да свържете Python към SQL Server за автоматизиране на бекенд процес

Автоматизирането на бекенд процеси във вашия екземпляр на 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Поправете „Преобразуването не бе успешно при конвертиране на стойността на varchar“ при опит за конкатенация в SQL Server

  2. Как да добавите номера на редове в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 11

  3. Съхранена процедура за SQL повикване за всеки ред без използване на курсор

  4. 2 начина за създаване на таблица, ако тя не съществува в SQL Server

  5. SQL заявка за избор на дати между две дати