Dmustache
@Dmustache
Python, Cpp, SQL

Как удержать подключение к sql серверу с помощью python pyodbc?

Я делаю приложение на python(tkinter, pyodbc), и я хотел бы узнать, можно ли удержать подключение к sql-серверу для того чтобы не подключаться к серверу много раз?
import pandas
import pyodbc
import getpass

data = pandas.read_csv(f'C:\\Users\\{getpass.getuser()}}\\Documents\\InClass\\table.csv', sep=';', encoding='utf-8')
df = pandas.DataFrame(data, columns=['group_id','group_description','group_size'])

connection_string = (
    'Driver={SQL Server};'
    'Server=User;'
    'Database=ServerName;'
    'Trusted_Connection = yes;'
)

conn = pyodbc.connect(connection_string)

cursor = conn.cursor()

for row in df.itertuples():
    cursor.execute('''
                INSERT INTO InClassServer.dbo.groups (group_id, group_description, group_size)
                VALUES (?,?,?)
                ''',
                row.group_id,
                row.group_description,
                row.group_size
                )
conn.commit()
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
@o5a
Во-первых, можно просто не закрывать соединение. Или использовать ту же самую глобальную переменную-соединение, или для удобства создать класс, обеспечивающий работу с базой, например так:
# пример был для sqlite, но принцип одинаков
class DataBase():
    def __init__(self, database_name):
        self.conn = sqlite3.connect(database_name)
        self.cursor = self.conn.cursor()

    def commit(self):
        self.conn.commit()

    def close(self):
        self.conn.close()

# затем создаем один раз объект-соединение и с ним уже работаем
db = DataBase('...')
c = db.cursor
c.execute('CREATE TABLE ...)')
c.execute('INSERT INTO TABLE ...)')
db.commit()
# где нужно используем один и тот же объект-соединение


Во-вторых для выполнения множественных операций (как в данном случае insert) вместо execute есть команда executemany. Ей как раз передается вложенный список строк данных, и она будет исполняться гораздо эффективнее повторного вызова execute по каждой строке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Не делайте подключение локальной переменной.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:03
75000 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект