Commit 7605fad0 authored by Julian Volland's avatar Julian Volland
Browse files

Merge branch 'Development' into 'master'

Development

See merge request !4
parents 47a0278d 43c82d3d
......@@ -8,9 +8,9 @@
1. Anforderungen
Min. Python version: 3.X
Module: psycopg2
User auf der Datenbank erstellen
Schema für diesen User erstellen
Module: psycopg2
User auf der Datenbank erstellen
Schema für diesen User erstellen
2. Ausführung
......@@ -25,26 +25,26 @@ Schema für diesen User erstellen
Min. Python version: 3.X
Module: psycopg2
User auf der Datenbank erstellen
Schema für diesen User erstellen
User auf der Datenbank erstellen
Schema für diesen User erstellen
2. Benötigte Datei:
- Wählbarer Name
- Wählbarer Name
=> Syntax:
{dbuser: [Benutzername], dbname: [Datenbankname], (dbpass: [Benutzerpasswort] -> nur wenn Benutzer passwort hat, sonst weg lassen!)}
[Anonyme Daten Tabelle]{Schema}
[tab][Tabellenname der zu anonymisierenden Tabelle]{Schema}
Bsp.:
{dbuser: fsv, dbname: fsv}
[vornamen]{anonymschema}
[benutzer][vorname]{orginalschema}
[angestellte][vornamen]
[pgd][pgd_vornamen]{public}
{dbuser: anonym, dbname: devdb, dbpass: anonympass}
[nachnamen]{testschema}
[angestellte][nachnamen]
=> Syntax:
{dbuser: [Benutzername], dbname: [Datenbankname], (dbpass: [Benutzerpasswort] -> nur wenn Benutzer passwort hat, sonst weg lassen!), dbhost: [host], dbport: [port], key: [primarykey(s)]}
[Anonyme Daten Tabelle(PRIMARYKEY)]{Schema}
[tab][Tabellenname der zu anonymisierenden Tabelle]{Schema}
Bsp.:
{dbuser: fsv, dbname: fsv}
[vornamen]{anonymschema}
[benutzer(vorname,nachname)][vorname]{orginalschema}
[angestellte(kennung)][vornamen]
[pgd][pgd_vornamen]{public}
{dbuser: anonym, dbname: devdb, dbpass: anonympass, dbhost: data.rrze.uni-erlangen.de, dbport: 5432}
[nachnamen]{testschema}
[angestellte][nachnamen]
(Bei nichtangabe von einem Schema wird das der vorherigen Zeile verwendet! (Bei der ersten Angabe von der Anonymisierungstabelle und der zu anonymisierenden Tabelle muss jeweils das Schema angegeben werden!))
......@@ -64,8 +64,8 @@ Schema für diesen User erstellen
Min. Python version: 3.X
Module: psycopg2
User auf der Datenbank erstellen
Schema für diesen User erstellen
User auf der Datenbank erstellen
Schema für diesen User erstellen
......@@ -87,7 +87,8 @@ Schema für diesen User erstellen
3. Ausführung:
1. Tabellenliste anlegen (im Bsp. "table.txt")
2. "pytablesoutoftextfile.py" ausführen => Tabellen werden ohne Daten angelegt
3. "pysqlstatementsoutoftextfile" ausführen => "createtables.sql" mit SQL-Statements wird erzeugzt
3. psql -f createtables.sql ausführen => Tabellen werden ohne Daten angelegt
......
{dbuser: fsv, dbname: fsv}
[vornamen]{public}
[user][vornamen]{test}
[vornamen]{test}
[user(vornamen,nachnamen)][vornamen]{test}
[user][nachnamen]
[benutzer][vornamen]
[pgd][pgd_vornamen]{public}
......@@ -5,6 +5,9 @@ from psycopg2 import sql
import sys
from random import randrange
import argparse
from psycopg2.extensions import AsIs
import re
parser = argparse.ArgumentParser()
......@@ -46,8 +49,7 @@ for line in replacelines:
elif "dbport" in parameter:
dbport = (parameter.split(' '))[1]
if "}" in dbport:
dbport = dbport[:-1]
dbport = dbport[:-1]
elif (newline[0]) == '[':
replacetable = (((newline.split(']'))[0]).split('['))[1]
if "{" in newline:
......@@ -58,6 +60,12 @@ for line in replacelines:
except:
print ("ERROR! Syntaxerror in you file [Line: " + str(linecount) + "]!")
exit()
else:
if "(" in oldtable:
primarykeylist = str(oldtable.split("(")[1]).split(")")[0]
oldtable = str((oldtable.split("(")[0]))
if "{" in newline:
replacementschema = (newline.split('{')[1]).split('}')[0]
try:
......@@ -90,48 +98,77 @@ for line in replacelines:
else:
parameterlist = (parameterlist + " host=" + dbhost + " port=" + dbport)
# Database #
print("Connecting to: " + parameterlist)
conn = psycopg2.connect(parameterlist)
cur = conn.cursor()
try:
cur.execute(sql.SQL("SELECT COUNT (id) FROM {}.{}").format(sql.Identifier(replacementschema),sql.Identifier(oldtable)))
anzahlbenutzer = (cur.fetchall())[0][0]
except:
error = 0
racur = conn.cursor()
selcur = conn.cursor()
# Update original table #
try:
cur.execute(sql.SQL("SELECT COUNT (id) FROM {}.{}").format(sql.Identifier(replacewithschema),sql.Identifier(replacetable)))
anzahl = (cur.fetchall())[0][0]
except:
error = 0
counter = 1
try:
anzahlbenutzer
selcur.execute(sql.SQL("SELECT %s FROM {}.{}").format(sql.Identifier(replacementschema),sql.Identifier(oldtable)), (AsIs(primarykeylist), ))
except:
error = 0
else:
while counter <= anzahlbenutzer:
while 1:
try:
cur.execute(sql.SQL("SELECT {} FROM {}.{} WHERE id = %s").format(sql.Identifier(replacetable),sql.Identifier(replacewithschema),sql.Identifier(replacetable)),(randrange(anzahl),))
user = selcur.fetchone()
except:
try:
print ("ERROR! The Table or column \"" + replacetable +"\" doesn't exist in the schema \"" + replacewithschema + "\" [Line: " + str(linecount - 1) + "]!")
except:
print ("ERROR! You need to specify a table and a schema [Line: " + str(linecount - 1) + "]!")
finally:
exit()
error = 0
counter2 = 0
# random value #
try:
racur.execute(sql.SQL("SELECT COUNT (id) FROM {}.{}").format(sql.Identifier(replacewithschema),sql.Identifier(replacetable)))
anzahl = (racur.fetchall())[0][0]
except:
error = 0
else:
value = "".join(cur.fetchall()[0])
racur.execute(sql.SQL("SELECT {} FROM {}.{} WHERE id = %s").format(sql.Identifier(replacetable),sql.Identifier(replacewithschema),sql.Identifier(replacetable)),(randrange(anzahl),))
value = "".join(racur.fetchall()[0])
# Update #
try:
cur.execute(sql.SQL("UPDATE {}.{} SET {} = %s WHERE id = %s").format(sql.Identifier(replacementschema),sql.Identifier(oldtable),sql.Identifier(oldcolumn)),(value,counter))
query = (sql.SQL("UPDATE {}.{} SET {} = {} WHERE {} = {}").format(sql.Identifier(replacementschema), sql.Identifier(oldtable), sql.Identifier(oldcolumn), sql.Literal(value), sql.Identifier(primarykeylist.split(",")[counter2]), sql.Literal(user[counter2])))
except:
print ("ERROR! The column \""+ oldcolumn +"\" inside the table \"" + oldtable +"\" doesn't exist inside the schema \"" + replacementschema + "\" [Line: " + str(linecount) + "]!")
exit()
conn.commit()
counter = counter + 1
error = 0
count = 1
while len(primarykeylist.split(",")) > (count):
add = (sql.SQL(" AND {} = {}").format(sql.Identifier(primarykeylist.split(",")[count]), sql.Literal(user[count])))
query = query + add
cur.execute(query)
conn.commit()
count = count + 1
counter2 = counter2 + 1
try:
selcur.scroll(0,mode='relative')
except psycopg2.ProgrammingError:
break
......@@ -53,11 +53,11 @@ lines = file.readlines()
file.close()
try:
cur.execute(sql.SQL("DROP TABLE {}").format(sql.Identifier(tablename)))
cur.execute(sql.SQL("DROP TABLE {}.{}").format(sql.Identifier(schema),sql.Identifier(tablename)))
except:
conn.rollback()
finally:
cur.execute(sql.SQL("CREATE TABLE {} (id serial PRIMARY KEY, {} varchar)").format(sql.Identifier(tablename),sql.Identifier(tablename)))
cur.execute(sql.SQL("CREATE TABLE {}.{} (id serial PRIMARY KEY, {} varchar)").format(sql.Identifier(schema),sql.Identifier(tablename),sql.Identifier(tablename)))
for name in lines:
cur.execute(sql.SQL("INSERT INTO {}.{} ({}) VALUES (%s)").format(sql.Identifier(schema),sql.Identifier(tablename),sql.Identifier(tablename)),(name[:-1], ))
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment