• 1401/07/27

اتصال به پایگاه داده در پایتون :

با سلام و خسته نباشید

کانکشن استرینگ برای اتصال به اس کیو ال سرور در صورتی که نرم افزار روی کلاینت ها و سرور اس کیو ال جدا هست چجوری باید باشه؟

در حال حاضر از این کانکشن استرینگ استفاده میکنم اما روی سیستم های کلاینت کار نمیکنه 

    con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};'
                         'Server=172.17.20.71;'
                         'Database=sadaf;'
                         'Trusted_Connection=yes;')

ممنون میشم راهنمایی کنید 

  • 1401/07/27
  • ساعت 16:46

با سلام.

 

آیا کلاینت ها و سرور در یک Network هستند یا خیر؟


  • 1401/07/27
  • ساعت 20:36

سلام دوست عزیز

در حال حاضر بله اما ممکنه در آینده بخوام روی اینترنت هم سرویس بدم


  • 1401/07/28
  • ساعت 21:58

اگر در یک شبکه هستند، مطمئن شوید که Client ها و Server در یک Network Class باشند ( در غیر این صورت نمی توانند همدیگر را ببینند. )

برای شبکه های کوچک، معمولاً از کلاس C استفاده می شود. به عنوان مثال اگر Client شما IP ی به شکل 192.168.0.10 دارد، Server نیز باید در همین Range یک IP داشته باشد مثلاً 192.168.0.20

 

می توانید IP هر سیستم را از طریق این دستور در Command Prompt به دست آورید:

ipconfig /all

 

به نظر می رسد که  IP فعلی ( 172.17.20.71 ) ، Public IP سرور باشد.

 

به هر حال برای ایجاد ارتباط بین clinet, server از طریق اینترنت به یک Static IP نیاز دارید و نیز باید تنظیماتی را اعمال کنید.

این لینک ها را ببینید:

لینک اول

لینک دوم

 

چون نمی دانم با مباحث شبکه چقدر آشنا هستید، این مطالب را خیلی ساده نوشتم، عذرخواهی مرا پذیرا باشید.

 


  • 1401/08/04
  • ساعت 06:37

با سلام و تشکر از شما دوست عزیز 

لینکهایی که ارسال کردید رو دیدم - همه سولوشن ها رو تست کردم اما باز هم این ارور نمایش داده میشه 

حتی روی سیستم کلاینت درایور هم جدا نصب کردم اما باز هم اجرا نمیشه


  • 1401/08/04
  • ساعت 09:12

برای SQL Server از درایور jTDS استفاده کنید ( من خودم هم از همین استفاده می کنم )

لینک دانلود درایور

لینک نحوه استفاده در PyCharm


  • 1401/08/04
  • ساعت 12:04

دوست عزیز خیلی ممنونم از وقتی که گذاشتی 

کارهایی که توی لینکها بود رو انجام دادم 

اما باز هم بعد از اینکه از پای چارم خروجی میگیرم و روی سیستم کلاینت اجرا میکنم همون ارور قبلی میاد

لازم هست کد ها رو تغییر بدم ؟ یا بعد از انجام این تنظیمات باید اتصال به پایگاه داده رو جور دیگه ای بنویسم کلا؟


  • 1401/08/04
  • ساعت 14:26

خواهش می کنم.

 

نام SQL Server Instance را پیدا کنید و در کدهای زیر به جای YourSQLServerInstanceName قرار دهید و تست کنید.

    con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};'
                         'Server=172.17.20.71\YourSQLServerInstanceName;'
                         'Database=sadaf;'
                         'Trusted_Connection=yes;')

  • 1401/08/04
  • ساعت 16:02

MSSQLSERVER هست و اضافه کردم متاسفانه همون لوکالی هم که اجرا میشد دیگه نمیشه 


  • 1401/08/04
  • ساعت 18:13

آیا از طریق پنجره Database در PyCharm می توانید به Server خود متصل شوید یا خیر؟


  • 1401/08/04
  • ساعت 21:48

بله وصل میشم - اون پایین سمت چپ گزینه تست داره میزنم پیغام ساکسسفول میده


  • 1401/08/05
  • ساعت 10:04

لطفاً یک capture از قسمت database ارسال کنید.

 اگر موافقید برای امشب یک ساعتی را هماهنگ کنیم که هر دو پای سیستم باشیم و بتوانیم زودتر موضوع را بررسی و به نتیجه برسانیم ( مثلاً ساعت 21 )


  • 1401/08/05
  • ساعت 11:30

بله حتما خیلی هم عالی باعث افتخار من هست - امشب ساعت 21 ان ان شاءالله منتظر شما هستم - البته اگه امروز ظهر تا عصر بتونیم هماهنگ بشیم که من سر کار باشم خیلی بهتر هست - باز هم هرجور شما راحت باشی

قسمت اتصال به دیتابیس هم به این صورت هست - دستور اس کیو ال بصورت رشته به این تابع ارسال و اجرا میشه و نتیجه بصورت جدول برمیگرده

import pyodbc
def select(com):
    con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};'
                         'Server=LOG-ALIPOUR;'
                         'Database=sadaf;'
                         'Trusted_Connection=yes;')
    cer = con.cursor()
    cer.execute(com)
    res = cer.fetchall()
    con.close()
    return res

  • 1401/08/05
  • ساعت 21:04

1. در ترمینال pycharm، خروجی دستور زیر را ارسال کنید.

pip freeze

 

2. مشخص کنید که در سیستمی که در حال حاضر با آن کار می کنید، SQL Server نصب هست یا خیر؟

 

3. در SSMS یک query جدید (روی db به نام master )  ایجاد کنید و خروجی دستور زیر را ارسال کنید.

SELECT @@version

SELECT @@SERVERNAME

SELECT *
FROM sadaf.sys.database_principals;

 

 


  • 1401/08/05
  • ساعت 21:23

سلام دوست عزیز ممنونم که وقت میذاری برای حل مشکل من  - با عرض معذرت من سیستم محل کار رو فراموش کردم روشن بذارم - شرمنده شما شدم ببخشید

ورژن 2017 اس کیو ال سرور رو نصب کردم - اسم سرور هم از توی خود management studio چک کردم 

LOG-ALIPOUR

هست

دستور آخر رو نمیدونم چیکار میکنه فردا که رفتم سر کار خروجیش رو ارسال میکنم 

 


  • 1401/08/05
  • ساعت 21:26

خواهش می کنم.

دستورات به ترتیب، نسخه و نام سرور و کاربران تعریف شده برای db را نمایش می دهند.

 

بسیار خوب، منتظرم.


  • 1401/08/06
  • ساعت 08:57

سلام و صب بخیر 

خروجی ها به ترتیب :

pip freeze

six==1.16.0

uuid==1.30

--------------------

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)   Aug 22 2017 17:04:49   Copyright (C) 2017 Microsoft Corporation  Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19042: ) 

-----------------

LOG-ALIPOUR

-----------------


  • 1401/08/06
  • ساعت 18:43

سلام.

پست شما را الان دیدم.

 

در package های نصب شده، pyodbc وجود ندارد. آنرا نصب کنید. اگر از venv استفاده نکردید، بهتر است یکی ایجاد کنید.

 

ترجیحا یک کاربر برای db بسازید (از طریق ssms) و permission های لازم را برایش set کنید.

 

سوال ۲ را نیز پاسخ دهید.


  • 1401/08/07
  • ساعت 06:54

سلام وخسته نباشید و تشکر ویژه از شما

پکیج pyodbc رو از قبل نصب کرده بودم اما محض اطمینان بنا به فرمایش شما دستور رو اجرا کردم واین خروجیش

pip install pyodbc

Requirement already satisfied: pyodbc in c:\users\j.alipour\appdata\local\programs\python\python310\lib\site-packages (4.0.34)

venv رو آشنایی ندارم ولی کنار فایل پروژه این پوشه هست 

کاربر normaluser رو خودم ایجاد کردم و تیک تمام دسترسی ها رو براش گذاشتم - حتی توی کاکشن استرینگ هم اون کاربر روگذشتتم و تست کردم اما جواب نگرفتم


  • 1401/08/07
  • ساعت 10:07

با سلام.

 

به طور خلاصه و ساده، venv مخفف virtual environment  است که محیطی مجازی برای نصب پکیج های مختلف ( با نسخه های متفاوت ) روی یک سیستم فراهم می کند. مثلاً در یک پروژه شما نیاز به استفاده از pyodbc دارید و در دیگری نه. 

 

به این قسمت بروید:

File > Settings > Project ...> Python Interpreter

 

در لیست Package ها چک کنید که pyodbc وجود داشته باشد.

چنانچه نیست، روی  دکمه + کلیک کنید و آنرا جستجوکرده و نصب کنید ( آخرین نسخه آن 4.0.34 است )

 

در هنگام ساخت پروژه، اگر گزینه inherit global-site package انتخاب نشده باشد، باید هر package ی را که لازم هست، در venv نصب کنید.

 

connection string را با توجه به اینکه از نام کاربری و کلمه عبور آن استفاده می کنید، ارسال کنید تا از صحت آن نیز مطمئن شویم.

 


  • 1401/08/09
  • ساعت 09:46

با سلام و احترام خدمت شما دوست عزیز و معذرت خواهی بابت تاخیر 

من یه ذره درگیر شدم ببخشید

فرمایشات شما رو انجام دادم باضافه اینکه هنگام ساختن فایل exe علاوه و customtkinter  و utils 

pyodbc رو هم اضافه کردم - و بعد از نصب درایور بصورت جداگانه ، نرم افزار روی سیستم کلاینت اجرا شد

خیلی خیلی از شما تشکر می کنم خیلی زحمت کشیدید - کاش میشد حق الزحمه شما رو یجوری پرداخت کنم.

این درایور رو میشه با همین auto-py-to-exe بذارمش که وقتی اجرا میشه بدون نیاز به نصب بالا بیاد؟

 


  • 1401/08/09
  • ساعت 10:23

سلام.

 

دوست گرامی،

خوشحالم که مشکل حل شد. من هم از قدرشناسی شما سپاسگزارم. نیازی به حق الزحمه و ... نیست.

ما همه اینجا هستیم که در کنار هم و با هم، یاد بگیریم، یاد بدهیم و تجربه های خود را با هم دیگر به اشتراک بگذاریم.

 

من با Py2Exe کار نکردم ولی فکر می کنم با collect submodules یا همین collect data یی که استفاده کردید، امکان پذیر باشد.

 

موفق و سلامت باشید.


  • 1401/08/09
  • ساعت 11:19

ای کاش همه طرز تفکر شما رو داشتند - بخاطر شما هم که شده اگه چیزی یاد گرفتم حتما توی این سایت میام و به سوالای تازه کارهایی مثل خودم جواب میدم ان شاءالله.

شما خروجی نرم افزار هایی که می نویسید رو با چه ابزاری میگیرید؟

py2exe  و pyinstaller ظاهرا برای پروژه های چند فایلی که بک اند و فرانت اند جدا هستند مشکل دارند


  • 1401/08/09
  • ساعت 23:08

در همین سایت تاپلرن، موسسان و بسیاری از مدرسان گرامی، با تهیه و توزیع دوره های رایگان، همین طرز تفکر را دارند و قطعا ورود شما را به جمع خود خیرمقدم می گویند.

 

من تحت web کار می کنم و خروجی ها در browser قرار می گیرند و پروسه توزیع پروژه به طور کلی با desktop متفاوت است.

اما در گذشته (و البته نه با پایتون) برنامه های desktop که می نوشتم، در نهایت برای توزیع آنها، با استفاده از برنامه های ساخت فایل setup مثل install shield و یکی دیگر که نام دقیقش را یادم نیست، فایل setup را می ساختم.

خاطرم هست در بخشی از آن، فایل exe را اجرا و تمام قسمتهای برنامه را اجرا می کردم (به همه پنجره ها می رفتم و روی تمام منوها و دکمه ها کلیک می کردم) و در نهایت برنامه ساخت setup تمام dependency های پروژه را تشخیص داده و در فایل setup لحاظ می کرد.

می توانید این را هم به عنوان یک solution در نظر بگیرید. یعنی فایل exe را بسازید و بعد، از روی آن فایل setup را بسازید.

البته عرض کردم که با پایتون، خودم تست نکردم.