Próbuję rozmawiać z AS400 w Pythonie. Celem jest użycie SQLAlchemy, ale gdy nie mogłem tego zrobić, cofnąłem się do bardziej podstawowego skryptu, używając tylko ibm_db zamiast ibm_db_sa.Połączenie z serwerem IBM AS400 dla operacji na bazach danych zawiesza się
import ibm_db
dbConnection = ibm_db.pconnect("DATABASE=myLibrary;HOSTNAME=1.2.3.4;PORT=8471;PROTOCOL=TCPIP;UID=username;PWD=password", "", "") #this line is where it hangs
print ibm_db.conn_errormsg()
Problem wydaje się być portem. Jeśli korzystam z 50000, które widzę we wszystkich przykładach, pojawia się błąd. Jeśli użyję 446, pojawi się błąd. Najbardziej zastanawiające jest to, że jeśli użyję 8471, co IBM says to do, nie otrzymam błędu, żadnego timeoutu, żadnej odpowiedzi. Pozostawiłem skrypt działający przez ponad dwadzieścia minut, a on po prostu siedzi, nic nie robiąc. Jest aktywny, ponieważ nie mogę w ogóle korzystać z wiersza poleceń, ale nigdy nie daje mi żadnej informacji zwrotnej.
Ten sam 400 jest używany przez firmę, w której pracuję na co dzień, do logowania, wysyłania wiadomości e-mail i (dużej ilości) użycia bazy danych, więc wiem, że to działa. Oprogramowanie, z którego korzystamy, rozmawia z bazą danych za kulisami, działa dobrze na moim komputerze. To mówi mi, że mój sterownik jest dobry, ustawienia sieciowe są poprawne i tak dalej. Mogę nawet telnetować się do 400 stąd.
Jestem na listach e-mail SQLAlchemy i ibm_db i komunikuję się z nimi przez wiele dni o tym problemie. Również googlowałem tak bardzo, że w wynikach wyszukiwania zaczyna brakować linków, które nie odwiedziły mnie. Wydaje się, że nikt nie ma problemu z zawieszeniem się połączenia na czas nieokreślony. Jeśli jest coś, co mogę wypróbować w Pythonie, spróbuję. Nie radzę sobie bezpośrednio z 400, ale mogę poprosić gościa, który sprawdza/konfiguruje to, co jest mi potrzebne. Jak już powiedziałem, kilka stacji roboczych może bez problemu rozmawiać z bazą danych w wersji 400, a zapytania uruchamiane w bibliotece, do której chcę uzyskać dostęp, działają poprawnie, jeśli są uruchamiane z samego 400. Jeśli ktoś ma jakieś sugestie, bardzo bym to docenił. Dzięki!
Jeśli zrobiłeś postępy w tej sprawie, byłoby wspaniale, gdybyś to udostępnił tutaj. Szukałem kodu 'ibm_db_sa', aby zobaczyć czy coś wyskoczyło na mnie, i coś takiego: moduł' 'pirodbc.py' wewnątrz' ibm_db_sa'] (https://github.com/ibmdb/python-ibmdbsa /blob/master/ibm_db_sa/ibm_db_sa/pyodbc.py) ma klasę o nazwie "AS400Dialect_pyodbc" i ma odpowiednią wartość dla 'pyodbc_driver_name'. Tak więc co najmniej * podjęto * próbę, aby SQLAlchemy działało z DB2 for i. –
Nie mam. Cóż, moja aplikacja się porusza, ale na razie polegam tylko na pyodbc. Próbowałem użyć SA, łącząc się z pyodbc, a następnie przekazując funkcję, która łączy się z create_engine, ale to nie zadziałało. – AH16
Ile nie ma dodatkowych funkcji SQLAlchemy? A jak dobrze (a) znasz Python i (b) znasz SQLAlchemy? Powodem, dla którego pytam jest to, że poprzez nieco więcej szturchań i szturchań, udało mi się uzyskać 'create_engine()', aby pomyślnie utworzyć silnik, i użyć tego silnika do robienia nagich zapytań SQL. Innymi słowy, mogę sprawić, że SQLAlchemy będzie służyć jako wyjątkowo zawiły pakowacz PyODBC, bez żadnej wartości dodanej. Cieszę się, że mogę podzielić się swoimi odkryciami, ale nigdy nie korzystałem z ORM, więc mogą pojawić się kolejne problemy, zanim będzie można w pełni wykorzystać SQLAlchemy. –