NHibernate代码生成器,,使用pyodbc连接MS
NHibernate代码生成器,,使用pyodbc连接MS
使用pyodbc连接MSSQL。
使用时,注意要修改代码开始部分的数据库连接和要生成的表名称。
#导入pyodbcimport pyodbc con = 'DRIVER={SQL Server};SERVER=jw01;DATABASE=pm2_dev;UID=sa;PWD=sa' #连接字符串cnxn = pyodbc.connect(con)cursor = cnxn.cursor()table_name = 'Basic_Privilege' #表名namespace = 'cn.justwin.Domain.Entities' #命名空间名称assembly_name = 'Domain' #程序集名称class_name = table_name.replace('_', '') #类名filecs = open(class_name + '.cs', 'w') #cs文件filexml = open(class_name + '.hbm.xml', 'w') #xml文件#MSSQL和C#的数据类型字典typedict = {'int': 'int', 'float': 'float', 'decimal': 'decimal', 'char': 'string', 'varchar': 'string', 'nvarchar': 'string', 'uniqueidentifier': 'Guid', 'datetime': 'DateTime', 'bit': 'bool'}#查找主键cursor.execute(''' SELECT COLUMN_NAME FROM information_schema.constraint_column_usage WHERE table_name = ? AND CONSTRAINT_NAME LIKE 'PK%'''', table_name)key_name = cursor.fetchone().COLUMN_NAME#写入CS文件的命名空间和类名filecs.write('using System;\\n\\n')filecs.write('namespace %s\\n' % (namespace)) filecs.write('{\\n') filecs.write('\\t/// <summary>\\n')filecs.write('\\t/// %s\\n' % (class_name))filecs.write('\\t/// </summary>\\n')filecs.write('\\tpublic class %s\\n' % (class_name))filecs.write('\\t{\\n')#写入XML文件filexml.write('<?xml version="1.0" encoding="utf-8"?>\\n')filexml.write('<hibernate-mapping assembly="%s" namespace="%s" xmlns="urn:nhibernate-mapping-2.2">\\n' % (assembly_name, namespace))filexml.write('\\t<class name="%s" table="%s" lazy="true" >\\n' % (class_name, table_name))#写入字段cursor.execute(''' SELECT SC.COLUMN_NAME, SC.COLUMN_DEFAULT, SC.IS_NULLABLE, SC.DATA_TYPE, SC.CHARACTER_MAXIMUM_LENGTH AS LENGTH, CAST(P.value AS nvarchar(200)) AS MS_DESC FROM information_schema.columns AS SC JOIN sys.tables AS T ON SC.TABLE_NAME = T.name JOIN sys.columns AS C ON T.object_id = C.object_id AND C.name = SC.COLUMN_NAME LEFT JOIN sys.extended_properties AS P ON C.column_id = p.minor_id AND P.major_id = T.object_id WHERE SC.table_name = ?''', table_name)rows = cursor.fetchall()for r in rows: #计算数据类型 data_type = typedict[r.DATA_TYPE] if r.IS_NULLABLE == 'YES' and data_type != 'string': data_type += '?' #字段描述,需要编码 ms_desc = r.MS_DESC.encode('utf-8') if r.MS_DESC else r.COLUMN_NAME filecs.write('\\t\\t/// <summary>\\n') filecs.write('\\t\\t/// %s\\n' % (ms_desc)) filecs.write('\\t\\t/// </summary>\\n') filecs.write('\\t\\tpublic virtual %s %s { get; set; }\\n\\n' % (data_type, r.COLUMN_NAME)) #XML中写入属性 property_type = 'id' if r.COLUMN_NAME == key_name else 'property' filexml.write('\\t\\t<%s name="%s">\\n' % (property_type, r.COLUMN_NAME)) column_info = '\\t\\t\\t<column name="%s" sql-type="%s' % (r.COLUMN_NAME, r.DATA_TYPE) if (r.LENGTH): column_info += '(max)' if r.LENGTH == -1 else '" length="%s' %(str(r.LENGTH)) column_info += '" not-null="false" />\\n' if r.IS_NULLABLE == 'YES' else '" not-null="true" />\\n' filexml.write(column_info) filexml.write('\\t\\t</%s>\\n' % (property_type)) #重载Object的方法filecs.write('\\t\\t#region Override Object Method\\n')filecs.write('\\t\\tpublic override string ToString()\\n')filecs.write('\\t\\t{\\n')filecs.write('\\t\\t\\treturn this.%s.ToString();\\n' % (key_name))filecs.write('\\t\\t}\\n')filecs.write('\\t\\tpublic override int GetHashCode()\\n')filecs.write('\\t\\t{\\n')filecs.write('\\t\\t\\treturn this.%s.GetHashCode();\\n' % (key_name))filecs.write('\\t\\t}\\n')filecs.write('\\t\\tpublic override bool Equals(object obj)\\n')filecs.write('\\t\\t{\\n')filecs.write('\\t\\t\\tif (obj == null) return false;\\n')filecs.write('\\t\\t\\tif (object.ReferenceEquals(this, obj)) return true;\\n')filecs.write('\\t\\t\\tif (this.GetType() != obj.GetType()) return false;\\n')filecs.write('\\t\\t\\treturn this.%s == ((%s)obj).%s;\\n' % (key_name, class_name, key_name))filecs.write('\\t\\t}\\n')#结束重载Object的方法filecs.write('\\t\\t#endregion\\n')#结束CS文件filecs.write('\\t}\\n') #类结束符filecs.write('}\\n') #命名空间结束符filecs.close()#结束XML文件filexml.write('\\t</class>\\n')filexml.write('</hibernate-mapping>')filexml.close()#该片段来自于http://byrx.net
相关内容
- 下载网络图像,网络图像,import osimp
- python求解水仙花数,python求解水仙花,#!/usr/bin/p
- 使用Tornado开发Github用户活跃度排名应用,tornadogithub,
- 程序猿没有女朋友怎么办,New一个呗!【property练习】,
- 搜索过多副本的大文件,搜索副本文件,文件多了乱放,
- python项目写一个计算器,python项目计算器,#coding:utf-
- 抓取三大电商今日特价,抓取三大电商,抓京东, 新蛋
- 如何把图片存入数据库,图片存入数据库,MYSQL 是支持把
- Python堆排序(最大堆),python堆排序最大堆,# -*- codin
- Python递归遍历文件夹,寻找包含某个字符串的文本文件
评论关闭