Bästa tjänst för databas online?

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2007

Bästa tjänst för databas online?

Jag håller på med ett program i python där jag behöver ha en databas av något slag online så att man kan köra programmet ifrån flera datorer och få tillgång till samma databas. Jag har tidigare sysslat lite med mysql men är annars ganska så grön på det och får mest huvudvärk när jag försöker hitta det jag behöver eftersom databaser är en hel vetenskap. Min fråga är alltså, var kan jag skaffa en mysql databas online utan att ha en websida? Det behöver inte vara någon speciellt stor och jag vill gärna att servern finns i europa.
Jag har också läst om s.k. non sql som mongodb och blir osäker på om jag ska välja detta eller mysql. Någon som har lite erfarenhet att dela med sig av?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012

Detta med sql vs nosql-varianter beror ju mycket på vilket slags data du vill lagra. Är relationer essentiellt typ användare som kan han ett antal konton som kan ha ett antal beställningar vilka innehåller ett antal varor så känns ju inte en nosql-databas så överdrivet hett, men är det mer i stil med massvis av datapunkter för nån bigdataaapplikation etc. så är det mer on point.

8700K 5Ghz | 32GB 3200Mhz | 2080Ti 11GB | Phanteks Enthoo

Trädvy Permalänk
Medlem
Registrerad
Sep 2017

Har inte snvänt det själv men min kollega gillar Firebase (Google). Kanske skulle passa?

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2007

@crumpets: Det som ska lagras är när kunder lämnar in saker för att repareras. Det är ett antal fält som är förutbestämt och egentligen behövs det inga relationer till andra tabeller så frågan är om det behöver vara en sql.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2013
Skrivet av Tallrot:

@crumpets: Det som ska lagras är när kunder lämnar in saker för att repareras. Det är ett antal fält som är förutbestämt och egentligen behövs det inga relationer till andra tabeller så frågan är om det behöver vara en sql.

Så typ en modell med ett kundid och produknamn + lite diverse fakta. Låter som du skulle kunna köra MongoDB.

https://mlab.com/welcome/
Erbjuder 500mb cloud-lösning free, så kan du alltid öka på om behovet finns.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Feb 2014

Jag räcker också upp handen för Firebase. Värt att kolla på åtminstone. Håller på med ett litet IoT projekt och har ingen direkt tidigare erfarenhet av python, men det tog inte lång tid att komma igång och skicka och ta emot data. Vi använder oss av Pyrebase och realtime database. En schysst egenskap är att du kan få notifieringar när något updateras/läggs till i realtid istället för att behöva hantera det själv.

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2007

@willeykk: Har börjar laborera med firebase och det verkar väldigt bra, stort tack för tipset. Jag är bara lite osäker på alla kommandon, vad är exempelvis skillnaden på set och post för att skicka data till basen? Har sett en del som använder push också för att skicka data.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Feb 2014
Skrivet av Tallrot:

@willeykk: Har börjar laborera med firebase och det verkar väldigt bra, stort tack för tipset. Jag är bara lite osäker på alla kommandon, vad är exempelvis skillnaden på set och post för att skicka data till basen? Har sett en del som använder push också för att skicka data.

Härligt att det går framåt! Mitt tips är att läsa dokumentationen för det bibliotek du valt att använda.

Då jag använt pyrebase så svarar jag utifrån det, olika implementationer kan ha valt att döpa högnivå-funktionerna olika. Exemplen i spoiler-taggarna är ifrån länken ovan.

Set, här specifierar användaren (du) själv hela kedjan.

data = {"name": "Mortimer 'Morty' Smith"}
db.child("users").child("Morty").set(data)

I firebase hade detta sett ut såhär;
- Users
---Morty
----- name: "Mortimer 'Morty' Smith"

Dold text

Push, där specifierar användaren allt, men du får unik nyckel för datan du lägger in.

data = {"name": "Mortimer 'Morty' Smith"}
db.child("users").push(data)

I firebase hade detta sett ut såhär;
- Users
---unik sträng
----- name: "Mortimer 'Morty' Smith"

I detta fallet ser du att kallet för att 'pusha' datan har en .child() istället för två, men ändå fått två nivåer i databasen.

Dold text

Vad som passar dig bäst är svårt att svara på. Det beror på din övriga implementation och hur du tänkt designa programmet. Jag hade antagligen kört på set om jag förstått ditt behov rätt, att du redan har genererat ett ordernummer.

db.child("orders").child(order_id).set(data) Där order_id är en sträng och data är en dictionary

Då är det enkelt att hämta enbart datan som en dictionary med;

order_info = db.child("orders").child(order_id).get()

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2007

@willeykk: Stort tack för all hjälp, nu är jag på god väg En annan liten fråga, när man skriver order_info = db.child("orders").child(order_id).get(), vet du hur man får ut den i något mer läsvänligt format? Tänkte lägga in datan i variabler i programmet.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Feb 2014

@Tallrot:
Om du är längst in i trädet, eller vad vi ska kalla det, så får du ut det som en dictionary. Sen det beror ju på vad du ska göra med det och vad programmet redan vet.

Om du redan vet nycklarna så kan du använda; x = order_info.get("order_id") så får du värdet, förutsatt att nyckeln i firebase ser likadan ut.

Läs dokumentationen länkad ovan för att lättare se vilka möjligheter du har.
order_info är ju egentligen redan en uppsättning variabler

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2007

@willeykk: Stort tack för hjälpen. Jag måste bara plåga dig med en sista fråga, jag försöker få ut en fil med samtliga poster för att få in dessa i en table widget i pyqt. Jag får alltid en none som första post när jag försöker iterera med följande kod:

def hamtaSamtliga():
temp = db.child("pagaende").get()
temp = temp.val()
for x in temp:
print(x)

Har du en aning varför eller hur man kan undvika detta?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Feb 2014
Skrivet av Tallrot:

@willeykk: Stort tack för hjälpen. Jag måste bara plåga dig med en sista fråga, jag försöker få ut en fil med samtliga poster för att få in dessa i en table widget i pyqt. Jag får alltid en none som första post när jag försöker iterera med följande kod:

def hamtaSamtliga():
temp = db.child("pagaende").get()
temp = temp.val()
for x in temp:
print(x)

Har du en aning varför eller hur man kan undvika detta?

Det är lugnt. Spontant så kommer jag på två orsaker. Det första är att du kanske har en tom rad i databasen? Det kanske har blivit något skumt där du skickar själva datan.

Det andra är om du inte inne hela vägen i databasen, alltså att "pagaende" har flera stycken pågående. I sådant fall ser datan du får ut något sånt här enligt dokumentationen;

{"Morty": {"name": "Mortimer 'Morty' Smith"}, "Rick": {"name": "Rick Sanchez"}}

istället för

{name": "Mortimer 'Morty' Smith, name": "Rick Sanchez"}

Vad jag lyckas få ut ur källkoden till pyrebase med mina väldigt begränsade python erfarenheter är att du då antagligen får ut ett pyreresponse från ditt query istället för en dict. Det borde med andra ord gå att köra:

templist = temp.each() #.each() är en funktion i pyreresponse-klassen

för att få en lista med objekt i rätt format. Sen bör du kunna behandla den listan med exempelvis;

for n in templist: print(n.val())

Med friskrivningsklausul på syntaxen från min sida