Zugriff mit pymssql auf MS-SQL Server

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Senseo3 hat geschrieben: Mittwoch 27. April 2022, 10:49 Hello -deets - ( cooles Posting :D )

Mal ensthaft: (FRIEDEN :wink: )

Hier, du Profi: https://docs.microsoft.com/en-us/previo ... dfrom=MSDN

Die Aussage ist korrekt, aber das comm.commit() schreibt doch erst mal die Daten im 1. Script in die Tabelle.
Innerhalb einer Transaktion legst du eine Tabelle an. Und dann legst du gleich Daten in einer Tabelle an, noch in der Transaktion. Erst dann kommt ein commit. Und in dem MSDN Artikel steht "nachfolgende Statements koennen sich nicht auf hinzugefuegte Spalten beziehen". Was du aber gerade gemacht hast.

Weswegen ich um das Experiment "Daten in bestehender Tabelle anlegen und auslesen" gebeten habe. Bestehend kann auch heissen die Tabelle in ihrer eigenen Transaktion anzulegen.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

LotharK hat geschrieben: Mittwoch 27. April 2022, 11:03 Hallo S3
Deine Fragen waren von Anfang an gut formuliert.
Du bist hier der Fragesteller. Das bedeutet: Dau, keine Ahnung, unerfahren. Dein Code ist schon ungelesen Schrott.

Dein Pi verwendet mit Sicherheit eine Version, welche damals einen Bug hatte. Du wirst Dich auf den Kopf stellen können, mit der Version funktioniert es nicht. Entweder neues Image oder so lassen.
Dein Programmschnipsel funktioniert einwandfrei. In der Connection musst Du noch "host" verwenden. Das ist das entscheidende Indiz. Richtig muss es nun "server" heißen, funktioniert bei Dir aber nicht.
Hast du auch inhaltlich was beizutragen, oder willst du einfach nur mal rumkotzen, weil dir eine Laus ueber die Leber gelaufen ist?

Das der Schnipsel einwandfrei funktioniert, wenn er das offensichlich nicht tut, weswegen hier ueberhaupt die Frage aufkommt, ist schon eine steile Behauptung. Und sehr hilfreich.
Senseo3
User
Beiträge: 24
Registriert: Donnerstag 2. April 2015, 08:37

Hallo,

Innerhalb einer Transaktion legst du eine Tabelle an. Und dann legst du gleich Daten in einer Tabelle an, noch in der Transaktion. Erst dann kommt ein commit. Und in dem MSDN Artikel steht "nachfolgende Statements koennen sich nicht auf hinzugefuegte Spalten beziehen". Was du aber gerade gemacht hast.


Was du schreibst klingt plausibel, aber wieso steht es dann so als offizielles Beispiel auf einer offiziellen Seite?
Und wieso bekomme ich als Resultat schon die Kopfzeile?
Ürigens - wie schon geschrieben, bekomme ich ja auch keine Daten aus einer längst vorhandenen Tabelle.



Aber wir werden das wohl beenden können. Die, so vermute ich, richtige Lösung wurde ja gepostet.

Gruß S3
Senseo3
User
Beiträge: 24
Registriert: Donnerstag 2. April 2015, 08:37

Hallo,
Nachtrag und Korrektur.
Das verwendete Script stammt von der offiziellen Seite pyMssql.

@deets
ich will hier wirklich nicht rummotzen, aber was sagst Du dazu? Die Entwickler haben den Code eigenhändig so hinterlegt. Es würde bedeuten, dass sie allse falsch gemacht haben und auch die msdn nicht gelesen haben.
Das erscheint mir aber unlogisch.

https://pythonhosted.org/pymssql/pymssql_examples.html

Ich habe das Sript tatsächlich von "server" auf "host" geändert, da "server" mit Fehler terminierte.

@Lothar nun habe ich zum Glück einen "Profi" gefunden - danke.

Gruß S3
LotharK
User
Beiträge: 51
Registriert: Sonntag 22. März 2015, 10:02

Hallo Deets,

wie bist Du denn drauf. Ich habe den angepassten Code bei mir laufen lassen und getestet. Bei mir funktioniert er. Die Tabelle wird angelegt und ich bekomme die Daten zurück.
Hast Du Dir auch die Mühe gemacht, oder beleidigst Du hier die anderen, weil du nur das am besten kannst?

Für mich ist das Thema erledigt!

By By
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Senseo3: Das erste Skript stammt von Python.org? Kannst Du da mal bitte einen Link drauf posten, denn das glaube ich so nicht mit der fehlerhaften Abfrage der Daten.

Edit: Okay Du hast also das Beispiel von pymssql und da aus einem `fetchone()` ein `fetchall()` gemacht. Warum auch immer.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Senseo3 hat geschrieben: Mittwoch 27. April 2022, 12:18 Hallo,
Nachtrag und Korrektur.
Das verwendete Script stammt von der offiziellen Seite pyMssql.

@deets
ich will hier wirklich nicht rummotzen, aber was sagst Du dazu? Die Entwickler haben den Code eigenhändig so hinterlegt. Es würde bedeuten, dass sie allse falsch gemacht haben und auch die msdn nicht gelesen haben.
Das erscheint mir aber unlogisch.
Es kann sein, dass sich so ein Verhalten ueber die Zeit aendert, abhaengig davon, wie die Datenbank sich entwickelt. Also deren Version. Darum mag das fuer die geklappt haben, und fuer dich nicht. Der Umgang mit DDL ist bei Datenbanken sehr unterschiedlich, weil es ein sehr komplexes Thema ist. Postgres zB erlaubt die komplett transaktional zu behandeln, SQLite kann das, was du probiert hast, auch ohne Probleme. MS hat da offensichtlich Probleme, sonst haette es ja funktioniert bei dir 🤷

Es hat also nicht so viel mit den Entwicklern von pymssql zu tun, die bedienen ja nur die Schnittstelle der DB. Das Verhalten der Datenbank selbst kontrolliert MS.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

LotharK hat geschrieben: Mittwoch 27. April 2022, 12:25 wie bist Du denn drauf. Ich habe den angepassten Code bei mir laufen lassen und getestet. Bei mir funktioniert er. Die Tabelle wird angelegt und ich bekomme die Daten zurück.
Hast Du Dir auch die Mühe gemacht, oder beleidigst Du hier die anderen, weil du nur das am besten kannst?
Du bist derjenige, der hier erstmal mit ein paar anmassenden Beleidigungen dazu, wie hier vermeintlich mit Usern umgegangen wird, eingestiegen ist. Also tu jetzt nicht so, als ob *ich* hier irgendwie drauf waere. Wer in den Wald ruft, der muss auch aushalten, was dann da so rausschallt.

Und beim TE hat's halt nicht funktioniert. Schoen, dass es das bei dir tut, eine Hypothese, warum das bei ihm nicht so ist, hast du nicht beigesteuert. ICh hingegen schon. Soviel also zu wer sich hier wieviel Muehe macht.
Antworten