Archive

Posts Tagged ‘psycopg2’

Python 3 = *grmpf*

July 4th, 2009 Jan H. Krueger No comments

Nachdem ich die Tage hoch getoent habe das die Umstellung auf Python 3 erfolgreich war, kam die Tage nun die ernuechterung. Es funktionieren mit pg8000 bei mir nur die Basisprozesse.

Aus mir nicht verstaendlichen und nachvollziehbaren Gruenden weigert sich pg8000 Updates auszufuehren. Select- und Insert-Querys stellen kein Problem dar, aber Updates… keine Chance. Hinzu kommt noch das ich die Fehlerbehandlung bei Python 3.1 / pg8000 nicht durchdrungen habe. Unter Python 2.5.2 / psycopg2 kam ich problemlos an die Fehlermeldungen heran. Das klappt hier nicht mehr. Vielleicht waere ich mit einer Fehlermeldung auch in der Lage pg8000 zu ueberreden auch Updates auszufuehren.

Konsequenz: Ich bin wieder zu Python 2.5.2 zureuck gegangen. Hier funktionieren zumidnest noch alle Bibliotheken und Module. Vielleicht schaue ich mir in einem halben Jahr noch einmal eine aktuelle Version an, wenn diese etwas gereifter ist und noch weitere Module nachgezogen haben.

Python-Umstellung erfolgreich

June 30th, 2009 Jan H. Krueger No comments

Soeben habe ich die Weichen stellen koennen um meine bisherigen Python-Skripte “zukunftssicher” zu gestalten.
Bisher habe ich noch mit Python 2.5 gearbeitet, doch so langsam machte sich dann doch die Umstellungslust breit. Also die heute frisch erschienene Version 3.1 gezogen und installiert. Da kam dann gleich die erste Frage auf, “Wie schauts mit der PostGres-Anbindung aus?” Im Netz geschaut, aber von Psycopg2 gibt es keine Version fuer Python 3. Schade. Aber sehr schnell habe ich pg8000 gefunden. Erfreulicherweise kam hier kaum eine Aenderung im Quellcode meiner bisherigen Arbeiten auf mich zu. Die Import-Anweisungen habe ich ausgetauscht und danach noch die Connect-Anweisung. Der komplette Rest, Querys, Result-Verarbeitung… alles geblieben wie unter Psycopg2. Sehr fein. Wenn das auch in anderen Sprachen so einfach waere.

Ein weiterer grober Check ueber meine anderen Module.. passt alles. Auch die Datumsfunktionen arbeiten noch wie gewuenscht, also derzeit noch keine wichtigen Verluste.

Was derzeit noch nich verfuegbar ist, ist eine aktuelle Version von Django. Aber an dieser Stelle habe ich noch etwas Zeit. Bis die Insulae-Klassen alle von PHP nach Python portiert wurden werde ich sowieso noch keine Zeit haben ich wieder um die Oberflaeche zu kuemmern. Und irgendwie ist Zeit derzeit so extrem fluechtig. Und bis ich dann tatsaechlich wieder daran komme mit matplotlib zu arbeiten, das dauert.

Categories: Insulae Tags: , , , ,

Regenerationsskript umgestellt

January 8th, 2009 Jan H. Krueger No comments

Nachdem ich die Tage dann endgueltig entschieden habe das die BackEnd-Skripte in Python entstehen sollen, habe ich mich nun daran gemacht das erste umzustellen. Das Regenerationsskript, wachstum.php ist fortan nicht mehr notwendig. Die Aufgaben uebernimmt nun wachstum.py.

Zugegeben, das ganze sieht noch etwas holprig aus und laesst sich bestimmt noch sauberer schreiben, aber was sollst. Mein erstes Pythonskript mit Postgresanbindung. Um genau zu sein, ich empfinde den Quellcode derzeit noch stark als unsauber. Aber das kommt mir der Praxis von alleine. Erste Erkenntnisse: es laefut schneller. Dabei habe ich bereits die Optionen romod1 bis romod4 mit enthalten, was das bisherige PHP-Skript noch nicht konnte. Weiterhin werde ich mir definitiv etwas basteln muessen um die Abfragen auszufuehren. Der rohe Code wirkt doch etwas viel und somit unuebersichtlicht.
Nun steht noch der Einbau der Phasenoptionen an und dann ists endgueltig fertig.

Wie auch immer. Es geht vorran. Und warum funktioniert wp_codebox nicht mehr?

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#! /usr/local/bin/python
##
# Copyright (c) 2009, Jan H. Krueger
# All rights reserved.
#
# The contents of this file are subject to the GNU Lesser General Public
# License (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.gnu.org/licenses/lgpl.html
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
#
# File: wachstum.py
# Authors: Jan H. Krueger (game.insulae@googlemail.com)
# Created: (07/01/2009)
# Last Updated: (08/01/2009)
# Version: 1.0
# Package: Insulae
# Category: Insulae-Backend
# Todos: use the phasing options 
#
 
#
# Let the land grow and produce new ressources at the farmable places.
#
 
import psycopg2
import psycopg2.extensions
import datetime
import time
import sys
 
E = sys.exit
 
### Connect to the postgresql database.
con = psycopg2.connect(
    database = "insulae",
    host = "localhost",
    user = "",
    password = ""
    )
 
varskriptname = 'wachstum.py'
 
 
### open cursor
cu=con.cursor()
 
### log the start of wachstum.py
try:
    varstatus = 'beginn'
    zeit = time.mktime(time.localtime(time.time()))
    vartime = str(zeit)[0:-2]
    sql = """insert into daten.skriptlog (skriptname, zeitstempel, 
             verarbeitungsstatus) values (%s, %s, %s)
          """
    cu.execute(sql, (varskriptname, vartime, varstatus))
    con.commit()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
### den romod_1 auslesen
try:
    sql = """select wert from optionen.einstellungen 
             where einstellung = 'romod_1'
          """
    cu.execute(sql)
    romod1 = cu.fetchone()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
### den romod_2 auslesen
try:
    sql = """select wert from optionen.einstellungen 
             where einstellung = 'romod_2'
          """
    cu.execute(sql)
    romod2 = cu.fetchone()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
### den romod_3 auslesen
try:
    sql = """select wert from optionen.einstellungen 
             where einstellung = 'romod_3'
          """
    cu.execute(sql)
    romod3 = cu.fetchone()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
### den romod_4 auslesen
try:
    sql = """select wert from optionen.einstellungen 
             where einstellung = 'romod_4'
          """
    cu.execute(sql)
    romod4 = cu.fetchone()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
# TODO: read the modificators for the phases
 
### build and execute the update
try:
    sql = """update welt.karte_phase set 
             karte_rohstoff1 = (karte_rohstoff1+karte_landwert)*%s, 
             karte_rohstoff2 = (karte_rohstoff2+karte_landwert)*%s, 
             karte_rohstoff3 = (karte_rohstoff3+(karte_landwert / 2))*%s, 
             karte_rohstoff4 = (karte_rohstoff4+(karte_landwert / 2))*%s 
          """
    cu.execute(sql, (romod1, romod2, romod3, romod4 ))
    con.commit()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
# Generate an entry in the history table to show the players
try:
    zeit = time.mktime(time.localtime(time.time()))
    vartime = str(zeit)[0:-2]
    histart = 1000000001
    histeintrag = 'Das Land regeneriert sich.'
    histprivat = 'n'
    histphase = 1000000000
 
    sql = """insert into sonstiges.historie 
             (historie_datum, historie_art, historie_eintrag, 
             historie_privat, historie_phase) values (%s, %s, %s, %s, %s)
          """ 
    cu.execute(sql, (vartime, histart, histeintrag, histprivat, histphase)) 
    con.commit()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
 
# Log the ending of wachstum.py.
try:
    varstatus = 'ende'
    zeit = time.mktime(time.localtime(time.time()))
    vartime = str(zeit)[0:-2]
    sql = """insert into daten.skriptlog (skriptname, zeitstempel, 
             verarbeitungsstatus) values (%s, %s, %s)"""
    cu.execute(sql, (varskriptname, vartime, varstatus)) 
    con.commit()
except psycopg2.ProgrammingError, errval: 
    print errval 
    E(8)
 
# Close the cursor and connection, end the script.
cu.close() 
con.close()
E(0)