客观讲,一直在忽略传统的关系数据库。
因为一直觉得它陈旧,刻板。比较偏爱no sel在于不用schema,可以存各种类型。 当然存在即合理,更何况这种主流的存在着。 sql因为严谨,那各个关系数据库之间同步,查询是比较一致的。另外现在有一些人工智能问答的研究方向,就是把自然语言seq2seq翻译成sql,然后查询关系数据库。 关系数据库是sql查询驱动,支持事务,还有就是跨表关联,nosql这几个方面当然都比较弱。 我的python版本是3.5,anaconda也安装不了MySQLdb,只能下载编译包。 这里可以下载到,各种win下已编译好的python包。 http://www.lfd./~gohlke/pythonlibs/ 然后本地pip install mysqlclient-1.3.12-cp35-cp35m-win_amd64 import MySQLdb
class MysqlMgr(object): def __init__(self): pass
def open(self): # 打开数据库连接 self.db = MySQLdb.connect("ip","usr","pwd","db_name", charset="utf8" ) self.cursor = self.db.cursor()
def close(self): self.db.close()
def create_table(self): self.open() # 如果数据表已经存在使用 execute() 方法删除表。 self.cursor.execute("DROP TABLE IF EXISTS mysql_demo")
# 创建数据表SQL语句 sql = """CREATE TABLE mysql_demo ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )"""
cursor.execute(sql) self.close()
def create_record(self): self.open() # SQL 插入语句 sql = """INSERT INTO mysql_demo(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # 执行sql语句 self.cursor.execute(sql) # 提交到数据库执行 self.db.commit() except: # Rollback in case there is any error self.db.rollback()
# 关闭数据库连接 self.close()
def delete_record(self): self.open() self.cursor.execute('delete from mysql_demo') self.db.commit() self.close()
def query_record(self): self.open() count = self.cursor.execute('select * from mysql_demo') results = self.cursor.fetchall() print(results) self.close()
数据库里的类型,不同关系数据库中有出入的,比如mysql有4种int,主要在存储字节数的差别。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 int 从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。 char与varchar的区别在于varchar是动态长度,这样可以省空间,但相对char会慢一些。 关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。
|