createdb.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import os
  2. import time
  3. import MySQLdb
  4. import psycopg2
  5. import _mysql_exceptions
  6. from wsgi import *
  7. def create_dbs():
  8. deadline = time.time() + 60
  9. while time.time() < deadline:
  10. try:
  11. print ("create_dbs: let's go.")
  12. django_settings = __import__(
  13. os.environ["DJANGO_SETTINGS_MODULE"], fromlist="DATABASES"
  14. )
  15. print ("create_dbs: got settings.")
  16. databases = django_settings.DATABASES
  17. for name, db in databases.iteritems():
  18. host = db["HOST"]
  19. user = db["USER"]
  20. password = db["PASSWORD"]
  21. port = db["PORT"]
  22. db_name = db["NAME"]
  23. db_type = db["ENGINE"]
  24. # see if it is mysql
  25. if db_type.endswith("mysql"):
  26. print "creating database %s on %s" % (db_name, host)
  27. db = MySQLdb.connect(
  28. user=user, passwd=password, host=host, port=port
  29. )
  30. cur = db.cursor()
  31. print ("Check if database is already there.")
  32. cur.execute(
  33. """SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
  34. WHERE SCHEMA_NAME = %s""",
  35. (db_name,),
  36. )
  37. results = cur.fetchone()
  38. if not results:
  39. print ("Database %s doesn't exist, lets create it." % db_name)
  40. sql = """CREATE DATABASE IF NOT EXISTS %s """ % (db_name,)
  41. print ("> %s" % sql)
  42. cur.execute(sql)
  43. print (".....")
  44. else:
  45. print ("database already exists, moving on to next step.")
  46. exit(0)
  47. # see if it is postgresql
  48. elif db_type.endswith("postgresql_psycopg2"):
  49. print "creating database %s on %s" % (db_name, host)
  50. con = psycopg2.connect(
  51. host=host,
  52. user=user,
  53. password=password,
  54. port=port,
  55. database="postgres",
  56. )
  57. con.set_isolation_level(0)
  58. cur = con.cursor()
  59. try:
  60. cur.execute("CREATE DATABASE %s" % db_name)
  61. except psycopg2.ProgrammingError as detail:
  62. print detail
  63. print "moving right along..."
  64. exit(0)
  65. else:
  66. print (
  67. "ERROR: {0} is not supported by this script, you will need to create your database by hand.".format(
  68. db_type
  69. )
  70. )
  71. exit(1)
  72. except psycopg2.OperationalError:
  73. print "Could not connect to database. Waiting a little bit."
  74. time.sleep(10)
  75. except _mysql_exceptions.OperationalError:
  76. print "Could not connect to database. Waiting a little bit."
  77. time.sleep(10)
  78. print "Could not connect to database after 1 minutes. Something is wrong."
  79. exit(1)
  80. if __name__ == "__main__":
  81. import sys
  82. print ("create_dbs start")
  83. create_dbs()
  84. print ("create_dbs all done")