Premiär! Fyndchans i SweClockers Månadens Drop

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

Permalänk
Medlem

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?

Permalänk
Medlem

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.

Visa signatur

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

Permalänk
Medlem

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

Skickades från m.sweclockers.com

Permalänk
Medlem

@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.

Permalänk
Medlem
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

Permalänk
Medlem

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.

Permalänk
Medlem

@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.

Permalänk
Medlem
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()

Permalänk
Medlem

@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.

Permalänk
Medlem

@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

Permalänk
Medlem

@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?

Permalänk
Medlem
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