�yFirebird�zDB/TABLE�쐬�pPython���W���[�� (original) (raw)
�@�Ɩ��n�̃V�X�e�����J�������ŁA�f�[�^�x�[�X�̊��p�͔����Ēʂ�Ȃ����̂Ǝv���B�ł��A����͎���i�K�ł́A�eDB�ʂ̊Ǘ��n�c�[���Ŏ����葁�����A�K�v�ƂȂ�f�[�^�x�[�X�\�����ł߂čs�����Ƃ���ʓI�ł͂Ȃ����낤���B�����āA���̃V�X�e���������A��������č����DB�t�@�C�����̂��̂�z�z����`�Ƃ��邱�Ƃ������Ƃ͎v���B
�@�������A���̏ꍇ�A�V�X�e���L�q���A�f�[�^�x�[�X�t�@�C����ƃv���O���������ɕ��U���Ă��܂��A�d�l�����Ȃ��ɂ͑S�̂��͂ݐh���Ȃ鑼�A�f�[�^�x�[�X�V�X�e�����̂̕ύX�܂��͂��̊֘A���W���[���̃��W���[�o�[�W�����A�b�v��V�X�e����Ղ̎d�l�ύX���Ƀl�b�N�������邱�ƂɂȂ��Ă��܂��̂ł͂Ȃ����Ǝv���B
�@�����ŁA����́A�ȑO��肱��Blog���Python�̃\�[�X�R�[�h���Ō��J���ė���Firebird�p�̊������܂Ƃ߂����W���[�����쐬���W�������A�V�X�e���z�z���ȊO�ɂ��v���W�F�N�g��[�U�ʂ̃f�[�^�x�[�X�̐V�K�쐬��Ջ@���ς�Pythpn�R�[�h��ōs�Ȃ����Ƃ��\�ȗl�ɂ��čs�����Ǝv���B
�@����܂Ƃ߂��͎̂��̊��ł���B
- exists_db() : �f�[�^�x�[�X�̑��݂��m�F�����
- exists_tbl(): �e�[�u���̑��݂��m�F�����
- exists_seq(): �ʂ��ԍ��Ɏg���w�肵�����̂�SEQUENCE�̑��݂��m�F�����
- tbl_name() : SQL������e�[�u�����𒊏o�����
- seq_name() : SQL������SEQUENCE���𒊏o�����
- create_db() : �f�[�^�x�[�X���쐬�����
- create_tbl(): �w��SQL���ɂ��e�[�u���쐬���s�Ȃ���
- exec_sqls() : ������SQL���̃��X�g��A�����s�����
�@�Z�p�I�ɂ͗]�����Ȃ��̂͂Ȃ����ADB�쐬���̂́A�f�[�^�x�[�X�̎�������Ŏ�@���قȂ�̂ł����܂�Firebird�̎d�l�Ɋ�Â��Ă���B
�@�f�[�^�x�[�X�T�[�o�ɓo�^����Ă���L����USER���ƃp�X���[�h���g���Adsn�Ƃ����A�l�b�g���[�N��̈ʒu�ƃt�@�C���V�X�e����̃t�@�C�����u:�v�R�����łȂ������̂��w�肵�čs�Ȃ��d�g�݂��B
�@�����āASQL������e�[�u�������̖��̂𒊏o����ׂɂ́APythpn�̐��K�\����re���W���[���ŁASQL���̃p�^�[���ƍ��Ŏ��������B
�@���̏�ŁA�e�[�u����SEQUENCE�쐬�ł́A���̒��o�������̂ɑ���������̂��A�f�[�^�x�[�X���g�̃V�X�e���e�[�u��(�Ⴆ�ARDB$RELATION_ID)�ɓo�^����Ă��邩�ǂ������m�F����d�g�݂Ƃ��Ă���B����́A�ȑO����������@�ł���B
�@����́A����SQL����̖��̂̃e�[�u����SEQUENCE�����݂��Ȃ��ꍇ�ɁA�������쐬����SQL�������s����������s�����邱�Ƃ��\�Ƃ���l�ɂ����̂ł���B���̂��Ƃ́ASQL�P�̎��s�łȂ��A������SQL�������X�g�Ƃ��ēn�����s����exec_sqls()���̃R�[�h�Ŋm�F�����邩�Ǝv���B
�@�ڍׂ́A�ȉ��Ɍf�ڂ��Ă���\�[�X�R�[�h�Ŋm�F��������ŁA�R�s�y�ŁAUTF-8�ʼn��s������LF�݂̂̃t�@�C���ufb.py�v�Ƃ��āA���g����Pythpn�C���X�^���X���́ulib/site-packages/�v�ȉ���mire�t�H���_���쐬���A���̒��ɕ��荞��Œ��������B
�@���p�́A�ufrom mire.fb import create_db�v�̗l��import���čs�Ȃ��Ē�����͂悢�B
�@���A�����_�ł̗��p����Ƃ��āAPythpn�ł�Firebird���p�ŕK�{��kinterbasdb���W���[���́APythpn3�n�ɂ͑Ή����Ă��Ȃ��B���ׁ̈A��������Pythpn��2.6.4�ł���B�����A�J���A�v���ɂ���ẮA2.3�`2.5���̑Ή���������Ă��Ȃ����W���[���𗘗p���Ă��邩������Ȃ��B���̏ꍇ�ɂ́A�������kinterbasdb���W���[���Ƌ��ɃC���X�g�[��������A���삷��Ƃ͎v���B
�@�܂��A�֑��Ȃ���A����gettext���g����i18n���ۉ��ɂ��Ή����Ď������Ƃ̊�]����A���ʂȂ�P����print���ŋL�ڂ���Ƃ�����A�킴�킴�A�p��\�L�Ƃ��A���̓��{����R�����g�Ƃ��Čf�ڂ����肵�Ă���B���͂܂��@�\���Ȃ��̂ŁA�p��\�L�ɂ��s���̕��́A�uu''�v���̕�����ɂ��Ēu�����Ē����č\��Ȃ��B
�@����ɁA�\�[�X�R�[�h���ɂ͐ϋɓI�ɃR�����g��lj����Ă��邪�A������͓��{��Ƃ��Ă���B�p�ꂾ�ƁA�����̓�����~����̂ƁA������Broken English�ł̓R�[�h�{�̈ȏ�̏�`���Ȃ��Ǝv�����炾�B���ׁ̈A���Ȃ��Ƃ�Windows���ւ̓����ł́A���W���[���̃w���v�Q�Ƃɕ֗��ȁuimport <���W���[����>; help(<���W���[����>)�v�̃R���\�[�����s�\���őS���{�ꂪ������������B�����help()��ASCII��������̎d�l�ƂȂ��Ă���ׂ̗l�Ȃ̂ŁA�f��Pythpn2�n�ł͎抸�������߂Ē��������B�����S��Unocode�����ꂽPythpn3�n�ł͉�������Ă���B�ǂ�Ȃɒx���Ƃ��Ԃ��Ȃ��o��ł��낤2.7�̐��������[�X��5�N�ȓ��ɂ�kinterbasdb�₻�̑��̎�v���W���[����Pythpn3�Ɉڍs���Ă��锤���B
�ŐV�ł� http://pythonlife.seesaa.net/article/146561690.html �ɂ���܂��B(2010-04-15 �NjL)
Lib/site-packages/mire/fb.py#!C:/Python26/python.exe
-- coding: UTF-8 --
"""
######################################################################
#exists_db() : DB�̑��݂��m�F�B �A�l: ����=1,�s����=0
#exists_seq(): �w�薼�̂�SEQUENCE�̑��݂��m�F�B�A�l: ����=1,�s����=0
#exists_tbl(): �w�薼�̂̃e�[�u���̑��݂��m�F�B�A�l: ����=1,�s����=0
#seq_name() : SQL������SEQUENCE���𒊏o���Ԃ��B
#tbl_name() : SQL������e�[�u�����𒊏o���Ԃ��B
#create_db() : DB���쐬
#create_tbl(): �w��sql�ɂ��e�[�u���쐬
#exec_sqls() : sql�̃��X�g�̘A�����s�B�����̃e�[�u����SEQUENCE�쐬�ւ�
���p��z��BDB���g�����A�v���ŁA�v���W�F�N�g�P�ʂ�DB��
�쐬����ꍇ��SQL���ꊇ�w�肵�čς܂��邱�Ƃ��\��
�l�ɒ����@�\�������BVIEW,TRIGGER,PROCEDURE�������Ή��B
���̊��ɂ́ASQL������A���̍쐬�Ώۖ��𒊏o�������
DB���Ɋ����̓����̂��̂��Ȃ������ׂ�����K�v�ƂȂ�B
��L��exists_tbl,exists_seq,tbl_name,seq_name�����̗��
���č쐬�\��(2010-02-24)�Btrigger�͒lj��ς������e�X�g�B
�������ǂ��g���̂͂��̂��炢�Ȃ̂Ō�͌���B
���A���̊��ɋ@�\���܂��ꂽcreate_tbls()�͔p�~�����B
"""
author = "Mire in Japan"
version = '0.0.1'
copyright = 'Copyright (c) 2010 Mire'
license = 'GPL'
url = 'http://pythonlife.seesaa.net/article/142141294.html'
import gettext #�ȉ���i18n���ۉ��̗��p�������R�[�h(������)���܂�
def exists_db(dsn='', user='SYSDBA', password='masterkey', debug=0):
"""
#### �ڑ����Ď��āADB�̑��݂��m�F ####
���݂����� 1��Ԃ��A�łȂ���A0��Ԃ�
"""
from kinterbasdb import connect
try:
conn=connect(dsn=dsn,user=user,password=password)
conn.close()
if not debug==0: print _('EXISTS_DB')
return 1
except:
if not debug==0: print _('NOT EXISTS_DB')
return 0def exists_trg(trg,conn=None,cur=None,dsn='', user='SYSDBA', password='masterkey'):
"""
�V�X�e���e�[�u���uRDB$TRIGGERS�v�ɐڑ����쐬�\��̃g���K�[����
�����̂��̂ƃ_�u���ĂȂ�������
"""
from kinterbasdb import connect
sql_exists="""SELECT RDB$TRIGGERS_ID
FROM RDB$TRIGGERS
WHERE RDB$TRIGGER_NAME='%s';""" % (seq)
if conn==None:
try:
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1
finally:
conn.close() # �ڑ������B
else:
try:
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1def exists_seq(seq,conn=None,cur=None,dsn='', user='SYSDBA', password='masterkey'):
"""
�V�X�e���e�[�u���uRDB$GENERATORS�v�ɐڑ����쐬�\���SEQUENCE����
�����̂��̂ƃ_�u���ĂȂ�������
"""
from kinterbasdb import connect
sql_exists="""SELECT RDB$GENERATORS_ID
FROM RDB$GENERATORS
WHERE RDB$GENERATORS_NAME='%s';""" % (seq)
if conn==None:
try:
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1
finally:
conn.close() # �ڑ������B
else:
try:
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1def exists_tbl(table,conn=None,cur=None,dsn='', user='SYSDBA', password='masterkey'):
"""
�V�X�e���e�[�u���uRDB$RELATIONS�v�ɐڑ���
�쐬�\��̃e�[�u�����������e�[�u����
�_�u���ĂȂ�������
"""
from kinterbasdb import connect
sql_exists="""SELECT RDB$RELATION_ID:e
FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME='%s';""" % (table)
if conn==None:
try:
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1
finally:
conn.close() # �ڑ������B
else:
try:
cur.execute(sql_exists)
if len(cur.fetchall())==0: # ���݂��Ȃ�������
return 0
else:
return 1
except:
return -1
def trg_name(sql, debug=0):
"""
CREATE TRIGGER ��SQL������TRIGGER���𒊏o���A���X�g�ŕԂ�
"""
import re
s='%s' % (sql)
s=sql.replace('\n', ' ')
ss=re.findall(r'(CREATE\sTRIGGER\s[a-z,A-Z,]*|create\trigger\s[a-z,A-Z,]*)',s)
nms=[]
for sq in ss:
nm=sq.split()
for n in nm:
if not re.search(r'(CREATE|create|Crate|TRIGGER|trigger|Trigger)',n):
nms.append(n)
if debug>0: print 'nms=', nms
return nms
def seq_name(sql, debug=0):
"""
CREATE SEQUENCE ��SQL������TABLE���𒊏o���A���X�g�ŕԂ�
�� ������ CREATE GENERATOR �͔��ɕt�A�Ή������B
"""
import re
s='%s' % (sql)
s=sql.replace('\n', ' ')
ss=re.findall(r'(CREATE\sSEQUENCE\s[a-z,A-Z,]*|create\sequence\s[a-z,A-Z,]*)',s)
nms=[]
for sq in ss:
nm=sq.split()
for n in nm:
if not re.search(r'(CREATE|create|Crate|SEQUENCE|sequence|Sequence)',n):
if n[-1]==';':
nms.append(n[:-1])
else:
nms.append(n)
if debug>0: print 'nms=', nms
return nms
def tbl_name(sql, debug=0):
"""
CREATE TABLE ��SQL������TABLE���𒊏o���A���X�g�ŕԂ�
"""
import re
s='%s' % (sql)
s=sql.replace('\n', ' ')
ss=re.findall(r'(CREATE\sTABLE\s[a-z,A-Z,]*(|create\stable\s[a-z,A-Z,]*()',s)
nms=[]
for sq in ss:
nm=sq.split()
for n in nm:
if not re.search(r'(CREATE|create|Crate|TABLE|table|Table)',n):
if n[-1]=='(':
nms.append(n[:-1])
else:
nms.append(n)
if debug>0: print 'nms=', nms
return nms
def create_db(dsn='localhost:DUMMY',user='SYSDBA',password='masterkey',page_size=None):
"""
"""
from kinterbasdb import create_database
ds=dsn[len(dsn.split(':')[0]):]
sql="CREATE DATABASE '%s' USER '%s' PASSWORD '%s'" % (ds,user,password)
if not page_size is None:
sql=sql+'PAZE_SIZE %d' % (page_size)
conn=create_database(sql)
conn.commit()
conn.close()def create_tbl(sql='',dsn='localhost:DUMMY',user='SYSDBA',password='masterkey'):
from kinterbasdb import connect
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()
cur.execute(sql)
conn.commit()
conn.close()
def exec_sqls(sqls=[],dsn='localhost:DUMMY',user='SYSDBA',password='masterkey', debug=0):
import re
from kinterbasdb import connect
#�ȉ���i18n���ۉ��̗��p�������R�[�h(������)���܂�
gettext.bindtextdomain('mire', './language/i18n')
gettext.textdomain('mire')
_ = gettext.gettext
conn=connect(dsn=dsn,user=user,password=password, debug=0)
cur=conn.cursor()
for sql in sqls:
if re.search(r'(CREATE\sTABLE\s|create\stable\s)',sql):
#�e�[�u���쐬SQL�Ȃ��
tables = tbl_name(sql) #TABLE�����擾
if len(tables)==1: #TABLE��������o������
table=tables[0]
ex_tbl=exists_tbl(table=table, dsn=dsn,
conn=conn,cur=cur, user=user, password=password)
if debug>0: print _('ex_tbl='), ex_tbl
if ex_tbl==0:
#�e�[�u�������݂��Ȃ��̂�
try:
cur.execute(sql) #����SQL�����s������
except:
if debug>0:
print _('failed in SQL execution.') #SQL���s�Ɏ��s���܂����B
print u''
else:
if debug>0:
print _('Already, table '%s' exists in this DB.' % (table))
#���ɁA�e�[�u��'%s' �͂���DB���ɑ��݂��܂��B
print _('Then, The SQL for CREATE TABLE was not executed.')
#����ŁA�e�[�u���쐬��SQL�͎��s����܂���ł����B
else:
if debug>0:
print _('table name was not specified.')
print 'tables=', tables
print 'sql='
print sql
elif re.search(r'(CREATE\sSEQUENCE\s|create\ssequence\s)',sql):
#SEQUENCE�쐬�Ȃ�
sequences = seq_name(sql)
if len(sequences)==1:
sequence = sequences[0]
ex_seq = exists_seq(seq=sequence, dsn=dsn,
conn=conn,cur=cur, user=user, password=password)
if debug>0: print _('ex_seq='), ex_seq
if ex_seq==0:
#�A�Ԃ����݂��Ȃ��̂�
try:
cur.execute(sql) #����SQL�����s������
except:
if debug>0:
print _('failed in SQL execution.') #SQL���s�Ɏ��s���܂����B
print u''
else:
if debug>0:
print _('Already, sequence '%s' exists in this DB.' % (sequence))
#���ɁASEQUENCE '%s' �͂���DB���ɑ��݂��܂��B
print _('Then, The SQL for CREATE SEQUENCE was not executed.')
#����ŁASEQUENCE�쐬��SQL�͎��s����܂���ł����B
else:
if debug>0:
print _('sequence name was not specified.')
# sequence��������o���܂���ł����B
print 'sequences=', sequences
print 'sql='
print sql
else:
try:
cur.execute(sql)
except:
if debug>0:
print _('SQL can not be executed.')
#SQL�͎��s�o���܂���B
print sql
conn.commit()
conn.close()
#def create_tbls(sqls=[],dsn='localhost:DUMMY',user='SYSDBA',password='masterkey'):
from kinterbasdb import connect
from mire.fb import exists_tbl
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()
for sql in sqls:
tables=tbl_name(sql)
if not len(tables)==1:
print 'tables=', tables
else:
table=tables[0]
if exists_tbl(table=table,conn=conn,cur=cur,dsn=dsn, user=user, password=password)==0:
print 'CREATE TABLE'
cur.execute(sql)
conn.commit()
conn.close()
| |
|
| ------------------------------------------------------------------------------------- |
�yFIREBIRD �֘A���e�z
- SQL RDBMS FIREBIRD��b ������ (��)
- SQL RDBMS FIREBIRD�ƃf�[�g ���ʗ�����
- SQL RDBMS FIREBIRD��2.5�Ŏn�߂悤 +�ڑ���Q�ؕ���
- Firebird-2.5.0.RC2 ��Install
- �yCentOS�zFirebird-2.5.0.RC2 ��Superclassic�N����
- �yFirebird�zDB/TABLE�쐬�pPython���W���[��
- �yFirebird�zDB/TABLE�쐬�pPython���W���[��2
- �yFirebird�z�X�֔ԍ���DB�̍쐬 ./dl_ZipCodeJp.py
- �yFirebird�z�X�֔ԍ���DB�̍쐬(2) ���p���W���[�� mire.fb
- �yFirebird�z�X�֔ԍ���DB�̍쐬(3) conf_section_items in mire.std
- �yFirebird�z�X�֔ԍ���DB�̍쐬(4) �����t�H�[���Ŋm�F
- �yFirebird�z�X�֔ԍ���DB�̍쐬(5) mire.htm �� str_input_form()