Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como conectar o Python ao SQL Server para automatizar o processo de back-end


Automatizar processos de back-end em sua instância do SQL Server é uma tarefa comum. Seja atualizando as estatísticas, reconstruindo índices, lendo ou excluindo dados, é extremamente valioso integrar outras estruturas de programação com seu RDBMS. Este artigo considerará esses tipos de tarefas especificamente integradas ao Python.

Não vamos nos concentrar em questões fundamentais como o que é SQL e Python, ou como e onde os usamos. Em vez disso, examinaremos os casos específicos que exigem a combinação de SQL e Python e vários módulos de métodos disponíveis para isso.

Cadeia de conexão do SQL Server


Antes de começarmos a explorar o caso do Python conectar-se ao SQL Server, vamos nos familiarizar com o básico.

Uma cadeia de conexão representa os dados necessários que apontam e autenticam sua instância de banco de dados. Pode haver pequenas nuances para cada tipo de instância de banco de dados, mas, em geral, as informações necessárias seriam o nome do servidor, driver do banco de dados, nome de usuário, senha e número da porta.

Detalhes da instância do SQL Server


Os detalhes dessa cadeia de conexão serão os mesmos de quando você se conectar via SSMS à instância do banco de dados. Anote a instância do banco de dados {SERVER}\{INSTANCE} formato – aqui está DESKTOP-6L1B155\FogelDev . Também é possível se conectar a um nome de servidor se você tiver apenas uma única instância padrão em execução.

Código de criação de banco de dados e tabela SQL Server


Primeiro, precisamos de um banco de dados com uma estrutura de tabela necessária para trabalhar com Python e SQL Server. O script a seguir criará esse banco de dados e uma única tabela nele. Essa tabela servirá como área de demonstração para vermos como usar SQL e Python juntos.
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')

Módulos Python


Nosso objetivo agora é definir como conectar o Python às instâncias do SQL Server. Vários módulos Python estão disponíveis para realizar esta tarefa, e dois deles são primários. Vamos lidar com o PYODC e SQLAlchemy . Esses módulos tratam da parte de conexão das operações.

Um código adicional é necessário para ler os dados das tabelas do SQL Server na memória. É aqui que os Pandas biblioteca entra.

Pandas pode ser integrado de perto com SQLALchemy para ler os dados diretamente no DataFrame objetos (em armazenamento baseado em array de memória que pode operar na velocidade da luz e se parecer com tabelas de banco de dados).

Vamos dar uma olhada em alguns exemplos de strings de conexão.

O primeiro exemplo usa o SQL Server e a instância da captura de tela anterior. Você pode definir essas variáveis ​​em seus detalhes específicos para instanciar a conexão.

Observe também que essa conexão específica usa a autenticação do Windows. Portanto, ele tentará autenticar como usuário da minha máquina Windows na qual estou conectado. Se nenhum nome de usuário e senha forem especificados, esse será o comportamento padrão na cadeia de conexão.
  • Nome do servidor ='DESKTOP-6L1B155'
  • Nome da instância ='FogelDev'
  • Nome do banco de dados =‘CODESIGHT_DEMOS’
  • Número da porta ='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))

Podemos testar se esta conexão funciona corretamente executando uma consulta com Pandas. Ele deve ler uma consulta da string de conexão usando o read_sql_query comando.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df

Autenticação do SQL Server


E se você precisar usar a cadeia de conexão baseada em autenticação do SQL Server para se conectar ao SQL Server? Podemos ajustar nosso código Python para adicionar nome de usuário e senha ao SQLALchemy motor.
  • Nome do servidor ='DESKTOP-6L1B155'
  • Nome da instância ='FogelDev'
  • Nome do banco de dados ='CODESIGHT_DEMOS'
  • Portnumber ='1433'
  • Nome de usuário =‘CodingSightUser’
  • Senha ='Senha123'
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))

Novamente, estamos testando nossa conexão, mas desta vez estamos selecionando apenas 1 registro da tabela.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df

Gravando dados


Por fim, dê uma olhada em como obter os dados do Python em nossa tabela de banco de dados do SQL Server. Criamos um objeto Dataframe e o anexamos à tabela.

O método 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)

Outro método seria inserir os dados diretamente na tabela com o comando execute.

O método Executar:
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')");

Quando terminar, a mesa final terá a seguinte aparência. Ele tem as 3 primeiras linhas carregadas pelo script de criação inicial do SQL Server e as 4 e 5 linhas são carregadas pelo Python.

Resumo


Esta postagem destacou os parâmetros da cadeia de conexão para conectar o código Python ao SQL Server. Examinamos a leitura dos dados do SQL Server e verificamos dois métodos de autenticação diferentes – o caso específico do Python conectar-se à autenticação do Windows do SQL Server e a autenticação padrão do SQL Server. Além disso, revisamos os métodos para carregar dados, um dos quais envolve o uso de objeto DataFrame em Python e outro é um comando SQL INSERT bruto.