Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Η Python σαν scripting language δίνει απεριόριστες δυνατότητες για αυτοματισμούς. Στο άρθρο αυτό θα δούμε πως σε συνεργασία με τον SQL Server γίνεται να μεταφράσουμε μέσα από το google translate πεδίο ολόκληρου πίνακα στα Ελληνικά με ένα κλικ.

Πρώτα θα πρέπει να ανοίξουμε το site με το chrome στο https://translate.google.gr/?hl=el .

Στο καθένα από τα δυο κουτία του source κειμένου και της μετάφρασης κάνουμε: δεξί κλικ – Inspect – Copy – Copy xPath και κρατάμε τις 2 τιμές.

Στην περίπτωση μας είναι:

input_box = '//*[@id="source"]'

output_box='/html/body/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[3]/div[1]/div[2]/div/span[1]/span'
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Στον SQL Server φτιάχνουμε τον πίνακα που θα κάνουμε την δοκιμή

CREATE TABLE [dbo].[googleit](

       [id] [int] IDENTITY(1,1) NOT NULL,

       [en_text] [varchar](4000) NULL,

       [gr_text] [varchar](4000) NULL

)

GO

Προσθέτουμε δύο τιμές που θέλουμε προς μετάφραση.

insert into dbo.googleit (en_text) values(‘Hello, have a nice day’)

insert into dbo.googleit (en_text) values(‘Lets test the possibilities’)
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Ενεργοποιούμε τη δυνατότητα στον SQL Server να τρέχει direct cmd script (αυτό το step είναι optional γιατί αν δεν θέλουμε μπορούμε στο τέλος να τρέχουμε το .py file απευθειας και να μην το τρέχει o SQL Server για εμάς).

exec sp_configure 'show advanced option',1

go

sp_configure 'xp_cmdshell',1

go

reconfigure with override

Στην περίπτωση που θα το τρέχει ο SQL Server Agent. Φτιάχνουμε και ένα Job που θα περιέχει το full path με το όνομα του αρχείου που θα εκτελεί.

π.χ.

"C:\Users\smatzouranis\Desktop\python\python_chrome_automation.py"
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Πάμε να δούμε τι πρέπει τώρα να  εγκαταστήσουμε για την Python.

Requirements

Download τον chromedrive στο folder που θα είναι το py file με τον κώδικα. (προσοχή θα πρέπει να κατεβάσουμε την αντίστοιχη έκδοση που είναι ο chrome μας): Chromedriver

Στο command prompt με την παρακάτω εντολή μας κάνει εγκατάσταση την python: cmd python

Στο command prompt  τρέχουμε τις εντολές αυτές ώστε να εγκατασταθούν τα modules που χρειαζόμαστε:

pip install –U selenium

pip install pyodbc

Steps

Αφού είμαστε έτοιμοι φτιάχνουμε ένα αρχείο με όνομα python_chrome_automation.py και αρχίζουμε και γράφουμε τον κώδικά μας που αναφέρετε κάτωθι:

#Για αρχή καλούμε τις βιβλιοθήκες που βάλαμε

from selenium import webdriver

from selenium.common.exceptions  import StaleElementReferenceException

import pyodbc,time

#Κάνουμε odbc connection με τη βάση βάζοντας τις ανάλογες πληροφορίες

conn = pyodbc.connect("Driver={SQL Server};"

                                                "Server=SMATZOURANISLP\SQL19;"

                                                "Database=translation;"

                                                "username=python;"

                                                "password=python;"

                                               "trusted_connection = yes;")

#το path που είναι ο chromedriver

chromedriver_location = "C:\\Users\\smatzouranis\\Desktop\\python\\chromedriver"

driver = webdriver.Chrome(chromedriver_location)

#Το site που θα ανοίξει ο chrome στην προκειμένη περίπτωση το google translate

driver.get('https://translate.google.gr/?hl=el')

#στις δύο αυτές παραμέτρους το xPath από το κουτί του source και target πεδίου του site που βρήκαμε πριν.

input_box = '//*[@id="source"]'

output_box = '/html/body/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[3]/div[1]/div[2]/div/span[1]/span'

cursor = conn.cursor()

cursor.execute('select * from googleit')

results = cursor.fetchall()

update = """update googleit set gr_text=? where id=?"""

for i in range(len(results)):

                try:

                                driver.find_element_by_xpath(input_box).clear()

                                value_in = results[i][1]

                                driver.find_element_by_xpath(input_box).send_keys(value_in)

                                time.sleep(4);

                                translated_text = driver.find_element_by_xpath(output_box).text

                                cursor.execute(update,(translated_text,i+1))

                except StaleElementReferenceException:

                                pass      

conn.commit();

cursor.close();

driver.quit;

conn.close();

exit();

Το αποτέλεσμα

Καλώντας τώρα το job μετά από μερικά δευτερόλεπτα ανάλογα το πόσες εγγραφές έχουμε και έπειτα με ένα select στο πίνακα μας εμφάνισε την μετάφραση.

exec msdb.dbo.sp_start_job 'callPythonw'

select * from googleit
Πώς μπορούμε να κάνουμε μετάφραση πεδιών στον SQL Server με χρήση Python (χωρίς API)

Μπορούμε και να φτιάξουμε μια procedure που θα καλούμε ώστε να εισάγει το κείμενο που θέλουμε προς μετάφραση και μόλις τελειώσει το job να μας επιστρέψει τα αποτελέσματα.

exec translation.dbo.trans 'its ok for me'

Ο κώδικας της procedure

/*
alter  procedure trans 
@text nvarchar(max) = null
as
set nocount on;
--truncate table translation.dbo.googleit;
insert into translation.dbo.googleit (en_text) values(@text);
exec msdb.dbo.sp_start_job 'callPythonw';
while ((select session_id from msdb.dbo.sysjobactivity with(nolock)  where job_id = (select job_id from msdb..sysjobs where name = 'callPythonw') and job_history_id is not null and start_execution_date >=  DATEADD(dd, -1,  GETDATE())
) is null)
begin
waitfor delay '00:00:02'
end
select top 1 en_text,gr_text from translation.dbo.googleit where en_text=@text 
go
*/
Μοιράσου το

Αφήστε μία απάντηση