Új hozzászólás Aktív témák
-
-
válasz
adam0913
#1143
üzenetére
Ha sqlite akkor csak körbe kell rakni szögletes zárójellel vagy macskakörömmel:[Tabla 123 akarmi]vagy"Tabla 123 akarmi"
Forrás: [link]#1145 - mysql-re meg mégjobb ez:
Csinálhatsz a forás névből egy hash-t és az lesz a tábla neve, nem lesz ütközés, és bármi lehet az eredeti név:
import hashlib
...
table_name = hashlib.sha256(name).hexdigest()Kódban így néz ki:
query = """CREATE TABLE IF NOT EXISTS "T_{tabla_nev}" (
`Megnevezes` varchar(100) DEFAULT NULL,
`Ev1` varchar(100) DEFAULT NULL,
`Ev2` varchar(100) DEFAULT NULL,
`Ev3` varchar(100) DEFAULT NULL,
`Ev4` varchar(100) DEFAULT NULL,
`Ev5` varchar(100) DEFAULT NULL,
`ID` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8""".format(tabla_nev=table_name)
ésquery = """load data local infile 'C:/Python27/output.csv'
into table "T_{tabla_nev}"
character set latin1
fields terminated by ';'
enclosed by '"'
lines terminated by '\r\n'
ignore 1 lines;
""".format(tabla_nev=table_name) -
válasz
adam0913
#1135
üzenetére
query = """CREATE TABLE IF NOT EXISTS {tabla_nev} (
`Megnevezes` varchar(100) DEFAULT NULL,
`Ev1` varchar(100) DEFAULT NULL,
`Ev2` varchar(100) DEFAULT NULL,
`Ev3` varchar(100) DEFAULT NULL,
`Ev4` varchar(100) DEFAULT NULL,
`Ev5` varchar(100) DEFAULT NULL,
`ID` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8""".format(tabla_nev=name)és
query = """load data local infile 'C:/Python27/output.csv'
into table {tabla_nev}
character set latin1
fields terminated by ';'
enclosed by '"'
lines terminated by '\r\n'
ignore 1 lines;
""".format(tabla_nev=name)De a name változó csak ellenőrzött forrásból jöjjön, különben: [link]
-
justmemory
senior tag
válasz
adam0913
#1137
üzenetére
Szerintem az aposztrófok miatt. Ha én hozzá szeretnék tenni egy változóban tárolt értéket az adatbázisomhoz, akkor a kód a következő:
cur.execute('insert into TABLE(Datum, Valami, Valami) \
values("'+str(mai_datum)+'", "'+str(valami_ertek)+'", "'+str(valami_ertek)+'");')Nézd meg, hogy az aposztrófok hogyan alakulnak... Még nem hoztam létre változóval táblát, de feltételezem, hogy nagyjából hasonló elv mentén kellene megpróbálni. Hozzá kell tegyem azt is, hogy én már nem MySQL-t, hanem SQLite3-at használok, de szerintem ebben olyan nagy különbség nincs.
-
justmemory
senior tag
válasz
adam0913
#1135
üzenetére
Szia,
csak azt nem írtad meg, hogy létrehozza-e a táblát ezzel a módszerrel...
Egyébként szerintem ennek a módszernek működnie kellene, szerintem én is így csinálnám, ennél egyszerűbb szerintem nincsen... (Mármint annál egyszerűbb, hogy egy változóban tárolt névvel hozz létra táblát, és ehhez a create table-t használod.)
Annyit azért hozzá kell tegyek, hogy a az aposztrófokkal (",') sokat kellett kísérletezzek, mire sikerült a változó és egyéb infókat úgy betennem, hogy aztán azt is csinálja a program, amit akartam
-
válasz
adam0913
#1126
üzenetére
arra gondoltam, hogy egy csv-nél vannak formázási lehetőségek, amiket használhatsz.
pl. a0,1,2,3és a"0";"1";"2";"3"ugyanaz a csv.és igen, ettől még meg kell oldanod, hogy az utolsó két oszlop az ne folyjon össze. ezért vagy egy listába parseolsz, és utána a lista két utolsó oszlopát összeadod, a szükségtelen elemeket pedig eltávolítod. így elég csak a csv.writernél formázni a csv-t.
#csv előkészítés
filename=r'path\output.csv'
#én ezeket (encoding, stb.) használom, egyéb megkötések miatt
resultcsv=open(filename,"w", encoding="iso-8859-15", newline='')
output=csv.writer(resultcsv, delimiter=';',quotechar = "'")
#ha valami az egy tömb az adatokkal
for row in valami:
row[3]=(str(row[3])+","+str(row[4]))
del row[4]
output.writerow(row)
#végül lezárjuk, vagy átírhatod with:-re és akkor nem kell
resultcsv.close() -
justmemory
senior tag
válasz
adam0913
#1130
üzenetére
Persze, hogy úgy hivatkozik rá, hiszen úgy tetted be gyakorlatilag egyetlen cellába, ezt jól látod

Azt a sort kellene picit megkezelni szerintem, hogy:for data in record.findAll('td'):
datatable = datatable+","+data.textItt a
datalesz a kulcs (pontosabban adata.text), ezeket kellene aforciklus alatt a különböző "adatbáziscellákba" elhelyezni szerintem.
Ez annyiból trükkös szerintem, hogy figyelned kell, hogy éppen melyik adatnál jársz (pénznem, devizanév, egység, pénznemforintban) aforciklus alatt, hogy azt az adatot a megfelelő cellába tudd tenni.Tegyük hozzá, hogy picit vaktában találgatok, mert közben nem próbálgatom itt konzolban...

-
justmemory
senior tag
válasz
adam0913
#1128
üzenetére
Sql adatbázishoz te magad adod meg, hogy melyik "cellába" mit és hogyan (milyen formátumban - pl. dátum, szám, stb.) mentsen (ok, talán a sorszámozás kivétel ez alól). Most így hirtelen a kódot nézve nem biztos, hogy direkt módon kellene/lehetne megoldani, hanem akár egy lista vagy valami más közbeiktatásával (változók külön-külön adatoknak).
Windows alatt nem használtam még sem a python-t, sem az sql-t, szóval lehet, hogy amit írok az nem mindig válik be. Linux egyszerűbb ilyen szempontból...

Azt is el kell döntened, hogy sqlite-ot vagy mondjuk mysql-t akarsz-e használni, mert picit más a metódusa az adatok kinyerésének is, plusz egyéb más specialitások is vannak. Az adatbáziskezelős dolog azért picit trükkösebb - vagy nekem legalábbis az volt - annál, mint hogy simán kiírod egy fájlba
A stackoverflow is jó; én olykor még a zetcode-ot is nézegettem. Plusz bármi mást, ami az adott problémámra releváns megoldást kínált...
-
justmemory
senior tag
válasz
adam0913
#1126
üzenetére
Szia,
szerintem amit te szeretnél, azt utólag, az Excelben való "mókolással" lehet a legegyszerűbben megoldani, hiszen alapvetően .csv kiterjesztésbe mented a python scriptben az adatokat; a .csv-t pedig - tudomásom szerint, de javítsatok ki, ha tévedek, mert nem vagyok nagy Excel guru - az Excel úgy nyitja meg, hogy egyetlen sorba írja ki. Ezen utólag lehet változtatni úgy, hogy magában az Excelben állítod be, hogy mondjuk a vesszők (vagy pontosvesszők) mentén szedje szét a sort, és tegye őket külön cellába...
Ha nagyon nagy butaságot írtam, bocsesz, de jelen tudásom szerint én kb. így csinálnám; nagyon nem néztem utána...
Egyébként a másik megoldás, hogy valamilyen adatbázisba (pl. sql) teszed be az adatokat, és akkor onnan mondjuk egy saját, adatbáziskezelős kis alkalmazással nyitogatod meg, és nem Excel-el. Persze ha Excel-ben kell dolgozz vele utána, az más...
Új hozzászólás Aktív témák
- Üzletből, Hp gyártói garanciával, HP EliteBook 840 G11 ultra 5-125u/16GBRAM/512GBSSD/HULLHD+ kijelző
- ÚJ Bontatlan Apple MacBook Neo 13" A18 Pro 8GB/256GB magyar billentyűzet 1 év Garancia Deák Térnél.
- SAPPHIRE INCA EP-10 GPU szerver ÜRESEN/kártyákkal
- ÚJ Bontatlan Apple Macbook AIR M2 , M3 , M4 Legújabb magyar billentyűzet 1 év Garancia Deák Térnél.
- AKCIÓ ÚJ Bontatlan Macbook Air 13,6 M4 10CPU/10GPU 16GB/512GB SSD TOUCH ID - Magyar Azonnal Deák tér
- Apple iPad Air 2 (A1567) 32GB Wi-Fi + Cellular Arany
- Honor 200 256GB, Kártyafüggetlen, 1 Év Garanciával
- HIBÁTLAN iPhone 12 Pro 128GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS4644
- Apple iPhone 14 Plus 128GB sárga használt, karcmentes 97% akku 6 hónap garancia
- Lenovo ThinkPad X1 Yoga G6 (6th Gen) - i7-1185G7, 32GB, 512GB SSD, multitouch + TOLL
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



