با سلام و خسته نباشید
کانکشن استرینگ برای اتصال به اس کیو ال سرور در صورتی که نرم افزار روی کلاینت ها و سرور اس کیو ال جدا هست چجوری باید باشه؟
در حال حاضر از این کانکشن استرینگ استفاده میکنم اما روی سیستم های کلاینت کار نمیکنه
con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};'
'Server=172.17.20.71;'
'Database=sadaf;'
'Trusted_Connection=yes;')ممنون میشم راهنمایی کنید
با سلام.
آیا کلاینت ها و سرور در یک Network هستند یا خیر؟
سلام دوست عزیز
در حال حاضر بله اما ممکنه در آینده بخوام روی اینترنت هم سرویس بدم
اگر در یک شبکه هستند، مطمئن شوید که 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 نیاز دارید و نیز باید تنظیماتی را اعمال کنید.
این لینک ها را ببینید:
چون نمی دانم با مباحث شبکه چقدر آشنا هستید، این مطالب را خیلی ساده نوشتم، عذرخواهی مرا پذیرا باشید.
با سلام و تشکر از شما دوست عزیز
لینکهایی که ارسال کردید رو دیدم - همه سولوشن ها رو تست کردم اما باز هم این ارور نمایش داده میشه
حتی روی سیستم کلاینت درایور هم جدا نصب کردم اما باز هم اجرا نمیشه
برای SQL Server از درایور jTDS استفاده کنید ( من خودم هم از همین استفاده می کنم )
دوست عزیز خیلی ممنونم از وقتی که گذاشتی
کارهایی که توی لینکها بود رو انجام دادم
اما باز هم بعد از اینکه از پای چارم خروجی میگیرم و روی سیستم کلاینت اجرا میکنم همون ارور قبلی میاد
لازم هست کد ها رو تغییر بدم ؟ یا بعد از انجام این تنظیمات باید اتصال به پایگاه داده رو جور دیگه ای بنویسم کلا؟
خواهش می کنم.
نام 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;')MSSQLSERVER هست و اضافه کردم متاسفانه همون لوکالی هم که اجرا میشد دیگه نمیشه
آیا از طریق پنجره Database در PyCharm می توانید به Server خود متصل شوید یا خیر؟
بله وصل میشم - اون پایین سمت چپ گزینه تست داره میزنم پیغام ساکسسفول میده
لطفاً یک capture از قسمت database ارسال کنید.
اگر موافقید برای امشب یک ساعتی را هماهنگ کنیم که هر دو پای سیستم باشیم و بتوانیم زودتر موضوع را بررسی و به نتیجه برسانیم ( مثلاً ساعت 21 )
بله حتما خیلی هم عالی باعث افتخار من هست - امشب ساعت 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 res1. در ترمینال pycharm، خروجی دستور زیر را ارسال کنید.
pip freeze
2. مشخص کنید که در سیستمی که در حال حاضر با آن کار می کنید، SQL Server نصب هست یا خیر؟
3. در SSMS یک query جدید (روی db به نام master ) ایجاد کنید و خروجی دستور زیر را ارسال کنید.
SELECT @@version
SELECT @@SERVERNAME
SELECT *
FROM sadaf.sys.database_principals;
سلام دوست عزیز ممنونم که وقت میذاری برای حل مشکل من - با عرض معذرت من سیستم محل کار رو فراموش کردم روشن بذارم - شرمنده شما شدم ببخشید
ورژن 2017 اس کیو ال سرور رو نصب کردم - اسم سرور هم از توی خود management studio چک کردم
LOG-ALIPOUR
هست
دستور آخر رو نمیدونم چیکار میکنه فردا که رفتم سر کار خروجیش رو ارسال میکنم
خواهش می کنم.
دستورات به ترتیب، نسخه و نام سرور و کاربران تعریف شده برای db را نمایش می دهند.
بسیار خوب، منتظرم.
سلام و صب بخیر
خروجی ها به ترتیب :
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
-----------------
سلام.
پست شما را الان دیدم.
در package های نصب شده، pyodbc وجود ندارد. آنرا نصب کنید. اگر از venv استفاده نکردید، بهتر است یکی ایجاد کنید.
ترجیحا یک کاربر برای db بسازید (از طریق ssms) و permission های لازم را برایش set کنید.
سوال ۲ را نیز پاسخ دهید.
سلام وخسته نباشید و تشکر ویژه از شما
پکیج 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 رو خودم ایجاد کردم و تیک تمام دسترسی ها رو براش گذاشتم - حتی توی کاکشن استرینگ هم اون کاربر روگذشتتم و تست کردم اما جواب نگرفتم
با سلام.
به طور خلاصه و ساده، venv مخفف virtual environment است که محیطی مجازی برای نصب پکیج های مختلف ( با نسخه های متفاوت ) روی یک سیستم فراهم می کند. مثلاً در یک پروژه شما نیاز به استفاده از pyodbc دارید و در دیگری نه.
به این قسمت بروید:
File > Settings > Project ...> Python Interpreter
در لیست Package ها چک کنید که pyodbc وجود داشته باشد.
چنانچه نیست، روی دکمه + کلیک کنید و آنرا جستجوکرده و نصب کنید ( آخرین نسخه آن 4.0.34 است )
در هنگام ساخت پروژه، اگر گزینه inherit global-site package انتخاب نشده باشد، باید هر package ی را که لازم هست، در venv نصب کنید.
connection string را با توجه به اینکه از نام کاربری و کلمه عبور آن استفاده می کنید، ارسال کنید تا از صحت آن نیز مطمئن شویم.
با سلام و احترام خدمت شما دوست عزیز و معذرت خواهی بابت تاخیر
من یه ذره درگیر شدم ببخشید
فرمایشات شما رو انجام دادم باضافه اینکه هنگام ساختن فایل exe علاوه و customtkinter و utils
pyodbc رو هم اضافه کردم - و بعد از نصب درایور بصورت جداگانه ، نرم افزار روی سیستم کلاینت اجرا شد
خیلی خیلی از شما تشکر می کنم خیلی زحمت کشیدید - کاش میشد حق الزحمه شما رو یجوری پرداخت کنم.
این درایور رو میشه با همین auto-py-to-exe بذارمش که وقتی اجرا میشه بدون نیاز به نصب بالا بیاد؟
سلام.
دوست گرامی،
خوشحالم که مشکل حل شد. من هم از قدرشناسی شما سپاسگزارم. نیازی به حق الزحمه و ... نیست.
ما همه اینجا هستیم که در کنار هم و با هم، یاد بگیریم، یاد بدهیم و تجربه های خود را با هم دیگر به اشتراک بگذاریم.
من با Py2Exe کار نکردم ولی فکر می کنم با collect submodules یا همین collect data یی که استفاده کردید، امکان پذیر باشد.
موفق و سلامت باشید.
ای کاش همه طرز تفکر شما رو داشتند - بخاطر شما هم که شده اگه چیزی یاد گرفتم حتما توی این سایت میام و به سوالای تازه کارهایی مثل خودم جواب میدم ان شاءالله.
شما خروجی نرم افزار هایی که می نویسید رو با چه ابزاری میگیرید؟
py2exe و pyinstaller ظاهرا برای پروژه های چند فایلی که بک اند و فرانت اند جدا هستند مشکل دارند
در همین سایت تاپلرن، موسسان و بسیاری از مدرسان گرامی، با تهیه و توزیع دوره های رایگان، همین طرز تفکر را دارند و قطعا ورود شما را به جمع خود خیرمقدم می گویند.
من تحت web کار می کنم و خروجی ها در browser قرار می گیرند و پروسه توزیع پروژه به طور کلی با desktop متفاوت است.
اما در گذشته (و البته نه با پایتون) برنامه های desktop که می نوشتم، در نهایت برای توزیع آنها، با استفاده از برنامه های ساخت فایل setup مثل install shield و یکی دیگر که نام دقیقش را یادم نیست، فایل setup را می ساختم.
خاطرم هست در بخشی از آن، فایل exe را اجرا و تمام قسمتهای برنامه را اجرا می کردم (به همه پنجره ها می رفتم و روی تمام منوها و دکمه ها کلیک می کردم) و در نهایت برنامه ساخت setup تمام dependency های پروژه را تشخیص داده و در فایل setup لحاظ می کرد.
می توانید این را هم به عنوان یک solution در نظر بگیرید. یعنی فایل exe را بسازید و بعد، از روی آن فایل setup را بسازید.
البته عرض کردم که با پایتون، خودم تست نکردم.