Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[Mariadb/Mysql] slaat niet op na update

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Na laatst mijn systeem geüpdatet te hebben blijkt nu dat ik een probleem heb met mijn Mariadb database.
Ik heb een raspberry met Debian draaien met een python programmaatje die gegevens verzameld en weg schrijft naar een mariadb database. Na de update blijkt dat hij hem niet meer wegschrijft naar de db. Geen foutmeldingen en binnen het programma zijn de gegevens wel te lezen en up te daten 8)7 Als ik pythonprogramma opnieuw opstart begint hij weer met de inhoud die database nu heeft.
Als ik nu een nieuw programmatje schrijf voor het schrijven en lezen van de gegevens ervaar ik precies hetzelfde.
Het probleem is dat ik database niet kwijt wil ivm de gegevens, maar verder heb ik alles al opnieuw geïnstalleerd.

Voor de duidelijkheid het heeft altijd gewerkt en over de .py heb ik geen twijfels.

Alle reacties


  • armageddon_2k1
  • Registratie: september 2001
  • Laatst online: 17:16
Werkt data toevoegen vanuit de MySQL console wel?

Passieve Einzelgänger met een 10 tot 3 mentaliteit - avwie.github.io


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
ja, dat werkt wel en via phpmyadmin ook.

  • Trucker Her
  • Registratie: juni 2009
  • Laatst online: 18-06 14:28

Trucker Her

Someone ate my cookie :(

Zou het kunnen dat na de update van je MariaDB _autocommit_ uit staat?

Dan commit je .py programma niet meer automatisch, en slaat 'ie dus niks op.

Gestoord word je toch...


  • AW_Bos
  • Registratie: april 2002
  • Laatst online: 19:37

AW_Bos

Waar ga je heen? ☀

Je zegt dat er met je python-script niks aan de hand is. Maar heb je wel voldoende error-afhandeling erin zitten? Maak bijvoorbeeld eens als test een query stuk, en kijk eens of je MySQL dan een foutmelding geeft.

Misschien geeft dat meer informatie.

[Voor 8% gewijzigd door AW_Bos op 01-03-2021 11:23]

Waar ga je heen?


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Trucker Her schreef op maandag 1 maart 2021 @ 11:22:
Zou het kunnen dat na de update van je MariaDB _autocommit_ uit staat?

Dan commit je .py programma niet meer automatisch, en slaat 'ie dus niks op.
Klinkt aannemelijk, hou kan ik dat controleren?

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
AW_Bos schreef op maandag 1 maart 2021 @ 11:23:
Je zegt dat er met je python-script niks aan de hand is. Maar heb je wel voldoende error-afhandeling erin zitten? Maak bijvoorbeeld eens als test een query stuk, en kijk eens of je MySQL dan een foutmelding geeft.

Misschien geeft dat meer informatie.
Heb ik geprobeerd, alle fouten worden gemeld.

  • Meneerik
  • Registratie: januari 2005
  • Laatst online: 19:29
ik denk dat je SQL-mode op NO_ENGINE_SUBSTITUTION moet zetten in je mariadbconf file.
code:
1
sql_mode                = NO_ENGINE_SUBSTITUTION

had ooit het zelfe. had met strict modes enzo te maken. deze link vond ik net als eerste qua uitleg
https://www.linode.com/co...disable-mysql-strict-mode

[Voor 65% gewijzigd door Meneerik op 01-03-2021 11:41]


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Meneerik schreef op maandag 1 maart 2021 @ 11:39:
ik denk dat je SQL-mode op NO_ENGINE_SUBSTITUTION moet zetten in je mariadbconf file.
code:
1
sql_mode                = NO_ENGINE_SUBSTITUTION

had ooit het zelfe. had met strict modes enzo te maken. deze link vond ik net als eerste qua uitleg
https://www.linode.com/co...disable-mysql-strict-mode
Zou ik dat nu geen foutmelding moeten krijgen als ik iet weg probeer te schrijven?

  • Meneerik
  • Registratie: januari 2005
  • Laatst online: 19:29
Reckless1976 schreef op maandag 1 maart 2021 @ 11:49:
[...]

Zou ik dat nu geen foutmelding moeten krijgen als ik iet weg probeer te schrijven?
yes

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Meneerik schreef op maandag 1 maart 2021 @ 11:39:
ik denk dat je SQL-mode op NO_ENGINE_SUBSTITUTION moet zetten in je mariadbconf file.
code:
1
sql_mode                = NO_ENGINE_SUBSTITUTION

had ooit het zelfe. had met strict modes enzo te maken. deze link vond ik net als eerste qua uitleg
https://www.linode.com/co...disable-mysql-strict-mode
Bovenstaande stappen doorlopen, helaas geen resultaat.

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Hoe kan ik de _autocommit_ controleren zoals iemand al aan gaf?

Acties:
  • +2Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Laatst online: 19:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Reckless1976 schreef op maandag 1 maart 2021 @ 12:07:
Hoe kan ik de _autocommit_ controleren zoals iemand al aan gaf?
Is je google stuk :?
http://php.net/manual/en/mysqli.autocommit.php

To determine the current state of autocommit use the SQL command SELECT @@autocommit.
It seems silly to determine if it's on and if not turn it on though.

Another way would be using:

SHOW VARIABLES WHERE Variable_name='autocommit';
We willen je best helpen, maar zoals je in onze Quickstart zult lezen verwachten we hier wel een béétje eigen inzet.

[Voor 31% gewijzigd door RobIII op 01-03-2021 12:26]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Bedankt RobIII voor je duidelijke reactie.
Maar helaas ook dit bied geen resultaat autocommit = on

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Toch vindt ik het vreemd de database maakt blijkbaar wel een registratie omdat hij de gegevens wel weel leest en er weer berekeningen mee doet. Tot dat het script herstart wordt.
Waar worden die gegevens vandaan gehaald?
Als ik tegelijkertijd via een ander weg de gegevens probeer te lezen krijg ik de oude gegevens.

  • Merethil
  • Registratie: december 2008
  • Nu online
Ik denk dan toch dat er wat met het script kan zijn; kan je een klein stukje relevante code tonen zodat we kunnen zien wat er precies gebeurt? Anders blijft het toch een beetje zoeken naar een speld in een hooiberg.

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Bij deze een stuk van het script.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
try:
    conn = mariadb.connect(
        user="xxx",
        password="xxx",
        host="localhost",
        port=3306,
        database="xxx"

    )
except mariadb.Error as e:
    print(f"MariaDB Platform: {e}")
    sys.exit(1)
else:
    print ("MariaDB Platform: Connected")

 try:
                    sql= "INSERT INTO C (c, i, v, g) VALUES (?, ?, ?, ?)"
                    data= (c, i, v, g)
                    cur.execute(sql, data)
                    print("      MariaDB\t\t: New c! {} ID: {} inserted.".format(c,cur.lastrowid))
                except mariadb.Error as e:
                    try:
                        sql= "UPDATE C SET i=?, v=?, g=?, a=? WHERE c=?"
                        data= (i, v, g, a, c)
                        cur.execute(sql, data)
                        if cur.rowcount > 0:
                            print("      MariaDB\t\t: C {} updated.".format(c))
                        else: # rowcount == -1
                            print("      MariaDB\t\t: The update made no changes.")
                    except mariadb.Error as e:
                        print(f"      MariaDB\t\t: Error writing to Platform: {e}")
                try:
                    cur.execute("SELECT c, a, l, la, i, v, g, p, co, o FROM C WHERE c = ?", (c,))
                    for (c, a, l, la, i, v, g, p, co, o) in cur:
                        print("      {} {} {} {}".format(c, i, v, g))
                except mariadb.Error as e:
                    print(f"MariaDB Platform: {e}")
            else:
                continue
    except KeyboardInterrupt:
        print("\n\n")
        break


Ik heb waarschijnlijk niet de juiste manier gebruikt om dit werkend te krijgen maar het functioneerd.

  • Creepy
  • Registratie: juni 2001
  • Laatst online: 13:57

Creepy

Moderator Devschuur®

Tactical Espionage Splatterer

Ik denk dat je wat code bent vergeten. Je maakt een connectie aan maar die wordt nergens gebruikt en "cur" komt ineens ergens vandaan. Probeer je code zo klein mogelijk te maken en je probleem te reproduceren. Dus maak eens een los scriptje dat een connectie maakt en een insert doet en kijk eens of dat hetzelfde probleem heeft. Je zegt dat je dat al hebt gedaan, dan is het een stuk makkelijker om naar die code te kijken en die te debuggen, wat je in principe in eerste instantie ook zelf zou moeten kunnen doen.

[Voor 22% gewijzigd door Creepy op 01-03-2021 14:07]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have star problems" --Kevlin Henney


  • Merethil
  • Registratie: december 2008
  • Nu online
Reckless1976 schreef op maandag 1 maart 2021 @ 14:00:
Bij deze een stuk van het script.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
try:
    conn = mariadb.connect(
        user="xxx",
        password="xxx",
        host="localhost",
        port=3306,
        database="xxx"

    )
except mariadb.Error as e:
    print(f"MariaDB Platform: {e}")
    sys.exit(1)
else:
    print ("MariaDB Platform: Connected")

 try:
                    sql= "INSERT INTO C (c, i, v, g) VALUES (?, ?, ?, ?)"
                    data= (c, i, v, g)
                    cur.execute(sql, data)
                    print("      MariaDB\t\t: New c! {} ID: {} inserted.".format(c,cur.lastrowid))
                except mariadb.Error as e:
                    try:
                        sql= "UPDATE C SET i=?, v=?, g=?, a=? WHERE c=?"
                        data= (i, v, g, a, c)
                        cur.execute(sql, data)
                        if cur.rowcount > 0:
                            print("      MariaDB\t\t: C {} updated.".format(c))
                        else: # rowcount == -1
                            print("      MariaDB\t\t: The update made no changes.")
                    except mariadb.Error as e:
                        print(f"      MariaDB\t\t: Error writing to Platform: {e}")
                try:
                    cur.execute("SELECT c, a, l, la, i, v, g, p, co, o FROM C WHERE c = ?", (c,))
                    for (c, a, l, la, i, v, g, p, co, o) in cur:
                        print("      {} {} {} {}".format(c, i, v, g))
                except mariadb.Error as e:
                    print(f"MariaDB Platform: {e}")
            else:
                continue
    except KeyboardInterrupt:
        print("\n\n")
        break


Ik heb waarschijnlijk niet de juiste manier gebruikt om dit werkend te krijgen maar het functioneerd.
Tja, volgens meerdere SO-topics lijkt het toch een gebrek aan een commit-statement; https://stackoverflow.com...e-statement-does-not-work
https://stackoverflow.com...-mysql-insert-not-working

Ook andere tutorials doen een db.commit()/connection.commit(), bv.: https://pynative.com/python-mysql-update-data/

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Autocommit staat aan

Maar laten we niet vergeten dat dit maanden achter elkaar gewoon gewerkt heeft met hetzelfde script.
Hoe heeft hij immers de database kunnen vullen tot 19-2.
Een update van mijn pi heeft het een en ander veranderd, niet een aanpassing in het script

  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
Creepy schreef op maandag 1 maart 2021 @ 14:06:
Ik denk dat je wat code bent vergeten. Je maakt een connectie aan maar die wordt nergens gebruikt en "cur" komt ineens ergens vandaan. Probeer je code zo klein mogelijk te maken en je probleem te reproduceren. Dus maak eens een los scriptje dat een connectie maakt en een insert doet en kijk eens of dat hetzelfde probleem heeft. Je zegt dat je dat al hebt gedaan, dan is het een stuk makkelijker om naar die code te kijken en die te debuggen, wat je in principe in eerste instantie ook zelf zou moeten kunnen doen.
Daarom heb ik ook geen reden om aan het script te twijfelen.

Acties:
  • +1Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Laatst online: 19:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Reckless1976 schreef op maandag 1 maart 2021 @ 14:51:
Een update van mijn pi heeft het een en ander veranderd, niet een aanpassing in het script
En je bent niet van Python 2.x naar Python 3.x gegaan? En wat weerhoudt je ervan om even een conn.commit() (of iets dergelijks) te proberen?
Reckless1976 schreef op maandag 1 maart 2021 @ 14:53:
Daarom heb ik ook geen reden om aan het script te twijfelen.
Nee, wat @Creepy zegt is: probeer eens met een minimaal script of het werkt?
  1. Open connectie
  2. Insert waardes
  3. Kijk in je DB of de waardes opgeslagen zijn
Dus niet 42 (of god-weet-hoeveel) regels code maar gewoon, overzichtelijk, een specifieke test om je assumpties te verifiëren.

[Voor 43% gewijzigd door RobIII op 01-03-2021 15:07]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Reckless1976
  • Registratie: mei 2018
  • Laatst online: 14-03 17:16
[...]

En je bent niet van Python 2.x naar Python 3.x gegaan?

[...]
Voorheen was ook Python 3
[...]

En wat weerhoudt je ervan om even een conn.commit() (of iets dergelijks) te proberen?

[...]
Niets weerhoud mij, heb het inmiddels ook al geprobeerd en helaas geen resultaat.
Wil alleen voorkomen dat het een hele discussie wordt terwijl je ook dingen moet kunnen uitsluiten.
Maar dat kan ook door het te proberen idd.
[...]
  1. Open connectie
  2. Insert waardes
  3. Kijk in je DB of de waardes opgeslagen zijn
[...]
Helaas ook geen resultaat, al valt het mij nu wel op dat als een insert doe, hij deze wel leest als het script nog loopt, na het sluiten hem niet meer ziet.
Maar de volgende insert maakt wel een volgende id aan. Dus ergens ziet hij wel dat er regels aangemaakt zijn.

Acties:
  • +1Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Laatst online: 19:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Dat lijkt toch écht ont-zet-tend veel op een commit die niet gedaan wordt. Kun je je testscript eens delen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Ben(V)
  • Registratie: december 2013
  • Laatst online: 19:13
Vertrouwen op een autocommit van een database is zo wie zo nooit zo'n best idee.
Als je nu eens gewoon een commit in je python script opneemt dan ben je waarschijnlijk van je probleem af.

En een autocommit werkt per connection is geen setting van de database.
Dus als je dat wilt gebruiken zul je dit moeten opnemen in je connect statement
autocommit=True
En zoals al opgemerkt is je python script gewoon fout.
Vervang overal "cur.execute" eens door "conn.execute", een cursor is helemaal nergens voor nodig hier, maar als je hem toch gebruikt dan moet je hem wel eerst aan je connection koppelen met:
cur = conn.cursor()

[Voor 61% gewijzigd door Ben(V) op 02-03-2021 13:32]

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


  • RobIII
  • Registratie: december 2001
  • Laatst online: 19:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Wat is hier nog uit gekomen @Reckless1976? Ben eigenlijk wel benieuwd.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • ericplan
  • Registratie: mei 2006
  • Laatst online: 20:16

ericplan

5180 Wp PV

Toch niet toevallig van MariaDB 5 naar 10 gegaan? Dan moet je naar poort 3307.

ZonPHP PVOutput


  • RobIII
  • Registratie: december 2001
  • Laatst online: 19:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

ericplan schreef op dinsdag 9 maart 2021 @ 11:29:
Toch niet toevallig van MariaDB 5 naar 10 gegaan? Dan moet je naar poort 3307.
Euh, dan deden z'n query's toch helemáál niks :? Daarbij vind ik 't een vrij veilige aanname dat het hier over 10.x gaat; 5.x is van 2009-2012... En tot slot: volgens mij is 3306 toch echt de default poort.

[Voor 37% gewijzigd door RobIII op 09-03-2021 11:51]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • ericplan
  • Registratie: mei 2006
  • Laatst online: 20:16

ericplan

5180 Wp PV

RobIII schreef op dinsdag 9 maart 2021 @ 11:48:
[...]
Euh, dan deden z'n query's toch helemáál niks :? Daarbij vind ik 't een vrij veilige aanname dat het hier over 10.x gaat; 5.x is van 2009-2012... En tot slot: volgens mij is 3306 toch echt de default poort.
Excuses, die 3307 bij MariaDB 10 is iets van Synology. Omdat ik er zelf tegenaan was gelopen, leek het me handig om te melden. En TS was niet erg informatief over de aard van de update.

ZonPHP PVOutput

Pagina: 1


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True